我有一个我以前从未见过的案例。
在一种情况下,我们通过代码分配十进制值,例如价值foo.DecimalField = 200M;
当我ToString()
没有格式化程序或文化时,我得到值"200"
在另一种情况下,当从EntityFramework分配相同的字段时,调试器仍然会说该字段的确切值为200M
,但是当ToString()
使用它时,它会产生{{1} }}
如果这是一个浮点问题,或者调试器中有隐藏的小数,我会得到它。
但由于我使用的是定点十进制类型,这怎么可能呢? 没有网络服务器或任何可能影响文化或其他内容的东西。
我错过了什么? 十进制类型的行为可能会有所不同,具体取决于它的初始化方式(我假设有一些读取器在内部从EF获取时会有小数点)
答案 0 :(得分:3)
与Double
不同,Decimal
保留零,例如
Decimal d0 = 200M;
Decimal d1 = 200.0M;
Decimal d2 = 200.00M;
// 200
String St0 = d0.ToString();
// 200.0 (or 200,0 depending on CultureInfo.CurrentCulture)
String St1 = d1.ToString();
// 200.00
String St2 = d2.ToString();
因此,似乎在计算,数据库阅读等过程中,一个值似乎是200M
而另一个200.00M
。