为什么c#没有'Decimal(x,y)

本文关键字:Decimal 没有 为什么 | 更新日期: 2023-09-27 17:51:00

为什么我不能声明我的变量为:

public decimal(1,1) Foo {get; set;}

在Sql(例如在Microsoft Sql)我可以写:

DECLARE @foo DECIMAL(1,1)
SET @foo = 1.0 / 3
SELECT @foo

和良好的0.3,而不用担心与其他浮点值比较时的二进制浮点问题。相反,我必须编写getter和setter:

public double Foo
{
    get { return Math.Round(_foo, 4); }
    set { _foo = Math.Round(value, 4); }
}

我需要像0.xxxx这样的精度。

更新:

简单的例子:

JsonSerializer.DeserializeFromReader(reader)给我的值是14.16904729,其他来源的数据是14.1690472890166。这是用于单元测试的数据集,我不能只是:

result.ShouldBeEquivalentTo(expected);

因为是浮点表示。现在我必须排除一些字段,写入setter, getter。

为什么c#没有'Decimal(x,y)

因为你不能?我的意思是,拜托——在。net中有一个定义好的十进制数据类型,它没有这个功能,因为它被认为不重要。想知道。net语言开发者对此有什么看法吗?这是离题了。

我个人觉得。net中的十进制情况非常令人失望,我会喜欢基于IEE754标准的Decimal32、Decimal64和Decimal128, SQL Server也是如此。

但是,我想要什么和它有什么两件事,我不负责那些部分,不能做那些改变。然而,一个更统一、更灵活的系统——根据IEE标准,将是伟大的。

或者你可以使用

decimal _Foo;
public decimal Foo{
get{
    return Foo;
}
set {
    _Foo =new decimal(X,X,X,X,X); // you can use here your scale or precision
}
}