是否有理由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 :(得分:14)
表示数字包括其精度可能很有用 - 所以0.5m可用于表示“0.45m到0.55m之间的任何东西”(有适当的限制),可以使用0.50m意思是“任何介于0.495米和0.545米之间的东西”。
我怀疑大多数开发人员实际上并没有使用此功能,但我可以看到它有时会如何有用。
我相信这种能力首先来自.NET 1.1,顺便说一下 - 我认为1.0中的小数总是有效地归一化。
答案 1 :(得分:4)
我认为这样做是为了从数据库中检索的数值提供更好的内部表示。 Dbase引擎具有以十进制格式存储数字(避免舍入错误)的悠久历史,并具有对值中数字位数的明确规范。
比较SQL Server decimal and numeric column types,例如。
答案 2 :(得分:2)
小数表示固定精度的十进制值。文字值0.50M
嵌入了2位小数位,因此创建的小数变量会记住它是2位小数位值。行为完全是设计的。
值的比较是对值的精确数值相等性检查,因此,尾部零点不会影响结果。