Java 加倍奇怪(不,这不是为了钱)

标签 java logic double

所以这是代码中唯一相关的部分

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/

相关文章:

java - 在 Java 中生成随机 double

java - 有没有办法用java或其他语言检索可用磁盘空间?

java - 我无法在 Jenkins 中构建工作,,,即使我已经给出了 github 的路径

c++ - std::vector 每次使用时都填充相同的数据

php - 寻找最佳解决方案所需的算法逻辑

c++ - 如何检查用户CIN输入是太少还是太多?

c# - 在 C# 中将字符串数组转换为 float 组

java 声音,fadeIn 效果,使用 FloatControl

java - 以编程方式创建的 AWS EC2 实例未显示在浏览器中

node.js - (双代理)node js 使用 node-http-proxy 在企业代理后面创建代理服务器