我有一个以前从未见过的案例。
在一种情况下,我们通过代码分配一个十进制值,例如值 foo.DecimalField = 200M;
当我 ToString()
没有格式化程序或区域性时,我得到值 "200"
在另一种情况下,当从 EntityFramework 分配相同的字段时,调试器仍然显示该字段的确切值为 200M
,但是当 ToString()
'编译它,它会产生 "200.00"
如果这里是浮点问题,或者调试器中存在隐藏的小数,我会明白。
但是由于我使用的是定点十进制类型,这怎么可能呢? 没有网络服务器或任何可能影响文化等的东西。
我错过了什么? 小数类型的行为是否会根据其初始化方式而有所不同(我假设有一些读者在从 EF 内部获取小数时会初始化小数)
最佳答案
与 double
不同,十进制
保留零,例如
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
。
关于c# - .NET 十进制格式根据源的不同而不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21573077/