可能的重复:
在 java 中使用 Doubles 保持精度
你知道Java中这两种操作的区别吗?
final double m1 = 11d / 1e9; // gives 1.1e-8
final double m2 = 11d * 1e-9; // gives 1.1000000000000001e-8
我在生成的字节码中看到 m2 的预编译结果已经不是我所期望的。
在javap -verbose -c
我的输出中可以看到以下值:
const #3 = double 1.1E-8d;
[...]
const #6 = double 1.1000000000000001E-8d;
当我在其他表达式中使用 m1 或 m2 时,我没有相同的结果。
当我在 C 中尝试同样的事情时,m1 和 m2 严格来说是 1.1e-8
我认为我的问题在于 java 处理双精度计算的方式,但我无法解释自己错过了什么。