.NET Decimal格式因源而异

时间:2014-02-05 09:22:10

标签: c# number-formatting fixed-point

我有一个我以前从未见过的案例。

在一种情况下,我们通过代码分配十进制值,例如价值foo.DecimalField = 200M; 当我ToString()没有格式化程序或文化时,我得到值"200"

在另一种情况下,当从EntityFramework分配相同的字段时,调试器仍然会说该字段的确切值为200M,但是当ToString()使用它时,它会产生{{1} }}

如果这是一个浮点问题,或者调试器中有隐藏的小数,我会得到它。

但由于我使用的是定点十进制类型,这怎么可能呢? 没有网络服务器或任何可能影响文化或其他内容的东西。

我错过了什么? 十进制类型的行为可能会有所不同,具体取决于它的初始化方式(我假设有一些读取器在内部从EF获取时会有小数点)

1 个答案:

答案 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