可能重复:
Floating point arithmetic not producing exact results in Java
Floating point inaccuracy examples
在Java中,给出以下代码:
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。但经过第二次计算,金额将为1.6600000000000001。我不明白为什么从double中减去一个int会导致这样的结果。
答案 0 :(得分:2)
如果您需要核心解释,请阅读经典What Every Computer Scientist Should Know About Floating-Point Arithmetic。它解释了为什么浮点运算中不可避免地存在微小的舍入误差,就像你所看到的那样。
如果您只想要摘要:计算机代表二进制的所有内容。在进行浮点运算时,二进制表示会在某些情况下导致微小的不准确性。
答案 1 :(得分:1)
从double中减去int不会仅改变double的整数部分。它也可以改变规模。在您的特定情况下,减法(6)之前的整数部分需要比减法(1)之后的整数部分更多的位来表示。这导致数字的整个表示允许更多的小数位。结果可能(正如您所发现的)有点出乎意料。 (双关语)