繁体   English   中英

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

[英]Why does a C# System.Decimal remember trailing zeros?

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之间的任何东西” ”。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM