我有两段代码。在我看来,它们应该产生相同的字符串,但它们不会:

(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/

10-13 06:45