Double minus int giving unexpected results
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Floating point arithmetic not producing exact results in Java
Floating point inaccuracy examples
号
在Java中,给出以下代码:
1 2 3 4 5 6 7 | double amount = scan.nextDouble(); tenBills = (int)amount / (int)10; amount = amount - (tenBills * 10); fiveBills = (int)amount / (int)5; amount = amount - (fiveBills * 5); |
在第一次计算之后,如果输入16个数量,则等于6.66。但第二次计算后的金额将为166000000000001。我不明白为什么从double中减去int会产生这样的结果。
如果你想要一个核心的解释,读一读每一个计算机科学家应该知道的关于浮点运算的经典著作。它解释了为什么在浮点运算中不可避免地会有微小的舍入误差,就像你看到的那样。
如果你只是想要一个总结:计算机用二进制表示一切。二进制表示在执行浮点运算时,在某些情况下会导致微小的误差。
从double中减去int不会只更改double的整数部分。它还可以改变比例。在特定情况下,减法(6)之前的整数部分需要比减法(1)之后的整数部分更多的位来表示。这将导致数字的整个表示允许更多的小数位。结果可能有点出乎意料。(双关语)