为什么C#System.Decimal会记住尾随零?

有没有理由C#System.Decimal会记住它输入的尾随零的数量? 请参阅以下示例:

public void DoSomething() { decimal dec1 = 0.5M; decimal dec2 = 0.50M; Console.WriteLine(dec1); //Output: 0.5 Console.WriteLine(dec2); //Output: 0.50 Console.WriteLine(dec1 == dec2); //Output: True } 

小数被归类为相等,但是dec2记住它是以额外的零输入的。 这是什么原因/目的?

表示包括其准确性的数字可能是有用的 – 因此0.5m可用于表示“0.45m和0.55m之间的任何东西”(具有适当的限制),0.50m可用于表示“在0.495m和0.545m之间的任何东西” ”。

我怀疑大多数开发人员实际上并没有使用这个function,但我可以看到它有时会如何有用。

我相信这种能力首先来自.NET 1.1,顺便说一下 – 我认为1.0中的小数总是有效地归一化。

我认为这样做是为了从数据库中检索的数值提供更好的内部表示。 Dbase引擎具有以十进制格式存储数字(避免舍入错误)的悠久历史,并且具有对值中的数字位数的明确规范。

例如,比较SQL Server 十进制和数字列类型 。

小数表示固定精度的十进制值。 文字值0.50M嵌入了2位小数位,因此创建的小数变量会记住它是2位小数位值。 行为完全是设计的。

值的比较是对值的精确数字相等性检查,因此,尾随零不会影响结果。