我有两段代码。在我看来,它们应该产生相同的字符串,但它们不会:
(1.23M * 100M).ToString()
结果是:
123,00
和
(123M).ToString()
结果是:
123
我非常简单的问题是:有人能解释一下为什么会发生这种(奇怪的?)行为吗?
最佳答案
它们是两个不同的值,按位。与 double
不同的是, decimal
不会自动标准化 - 看起来它保留了曾经有两个小数位的信息。无需乘法,您就可以看到完全相同的差异:
Console.WriteLine(123m)
Console.WriteLine(123.00m);
关于
decimal
值的操作结果究竟是如何执行的,就保留了多少小数位而言,文档有些不清楚(从我所见)。 (知道它在某处标准化了,我不会感到惊讶......)关于c# - 为什么具有相同值的两个小数的格式不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17516113/