考虑以下代码:
Console.WriteLine((197688 * 0.1) == 19768.800000000003); // True
Console.WriteLine((197688 * 0.1) == 19768.8); // False
是不正确的计算?
Java的> http://ideone.com/D3QsUo C# - > http://ideone.com/wp5pM9
答案 0 :(得分:3)
nature 中的浮点类型(和计算)不精确。它们以二进制方式工作,而不是十进制,因此计算会产生“意外”的十进制值。
与此相比:
Console.WriteLine((197688 * 0.1m) == 19768.800000000003m); // False
Console.WriteLine((197688 * 0.1m) == 19768.8m); // True
结果如您所料,因为使用了decimal
。顾名思义,由于其内部表示,它适用于十进制计算。
附注:经验法则 从不 使用浮点类型进行货币计算。完全因为decical值的精确度问题。
答案 1 :(得分:0)
A double
只有15-16位精度 - 编译器会将您的文字转换为可由double
表示的最接近的值,这种情况为19768.8
< / p>