Java中两个double值的简单比较会产生一些问题。让我们考虑以下Java中的简单代码段。
package doublecomparision; final public class DoubleComparision { public static void main(String[] args) { double a = 1.000001; double b = 0.000001; System.out.println("\n"+((a-b)==1.0)); } }
上面的代码似乎返回true,表达式的求值,((a-b)==1.0)但是没有。它false之所以返回,是因为该表达式的求值0.9999999999999999实际上是预期的1.0,1.0因此不等于,因此条件的求值为boolean false。解决这种情况的最佳建议方法是什么?
true
((a-b)==1.0)
false
0.9999999999999999
1.0,1.0
boolean false
基本上,你不应该进行精确比较,而应该执行以下操作:
double a = 1.000001; double b = 0.000001; double c = a-b; if (Math.abs(c-1.0) <= 0.000001) {...}