为什么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。
因为你不能?我的意思是,拜托——在。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
}
}