[英]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.