C#精度计算乘以int和double

时间:2014-01-07 18:15:12

标签: c# .net int double multiplication

考虑以下代码:

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

2 个答案:

答案 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>