所以这是代码中唯一相关的部分
System.out.println("first term of " + firstTerm +
" second term of " + secondTerm +
" third term of " + finalTermHolder +
" should equal " + oppositeIntHolder);
double holder = firstTerm + secondTerm + finalTermHolder;
System.out.println(holder + " should equal " + oppositeIntHolder);
这是不间断的代码,它们之间没有任何内容。第一个 println 的输出是:
first term of 2.5147186257614296 second term of -9.514718625761429 third term of 7.0 should equal 0.0
第二个 println 结果:
8.881784197001252E-16 should equal 0.0
为什么-9.5、2.5和7加起来是8.9而不是0?
最佳答案
它们相加不等于 8.9。它们加起来为 8.9e-16。大约是 0.00000000000000089
即使数字显示为 -9.5 等,您可能仍然会看到这一点。这是因为二进制计算机不能准确存储小数。发生小错误。是的,这正是金钱所带来的问题。
关于Java 加倍奇怪(不,这不是为了钱),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7086974/