为什么我无法将变量声明为:
public decimal(1,1) Foo {get; set;}
在Sql(Microsoft Sql中的示例)中,我可以写:
DECLARE @foo DECIMAL(1,1)
SET @foo = 1.0 / 3
SELECT @foo
并且在与其他浮动值进行比较时,不会遇到binary floating point问题而感到满意0.3
。相反,我必须把吸气剂写成一个二传手:
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。
答案 0 :(得分:4)
因为你不能?我的意思是,来吧 - 在.NET中有一个定义的十进制数据类型,它没有功能,因为它不被认为是重要的。想要争论.NET langauge dev对此有何看法?这是偏离主题的。
我个人觉得.NET中的十进制情况非常令人失望,并且根据IEE754标准会喜欢Decimal32,Decimal64和Decimal128 - 在SQL Server中也是如此。
然而,我想要的是什么以及它有什么两件事,我不负责这些部分,也不能做出这些改变。一个更统一,更灵活的系统 - 根据IEE标准,最重要的是,它会很棒。
答案 1 :(得分:0)
或者可以使用
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
}
}