c# - .NET 十进制格式根据源的不同而不同

标签 c# number-formatting fixed-point

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

在一种情况下,我们通过代码分配一个十进制值,例如值 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/

相关文章:

c# - Java/C# 中的检查异常是什么?

java - NumberFormat API 说明

android - OpenGL ES 的正射投影问题

mysql - 如何使用 Coldfusion 格式化整数?

c++ - 提高计算 1 到 2 之间的数字的 log2 的性能

C#泛型基础知识?

c# - DataGridComboBoxColumn : how to set TextBinding

c# - WCF 调用是否处理传输和接收的对象?

java - java.NumberFormat 如何获取区域设置的默认值