如何比较Java中的两个double值?

可能重复:
如何解决Java舍入双重问题

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"+((ab)==1.0)); } } 

上面的代码似乎返回true ,expression式((ab)==1.0)的评估,但它不。 它返回false因为这个expression式的评估值是0.9999999999999999 ,实际上这个值是1.0 ,不等于1.0因此条件评估为boolean false 。 什么是最好的和build议的方式来克服这种情况?

基本上你不应该做精确的比较,你应该这样做:

 double a = 1.000001; double b = 0.000001; double c = ab; if (Math.abs(c-1.0) <= 0.000001) {...} 

请使用java.math.BigDecimal,而不是使用双精度的十进制arithemetic。 这将产生预期的结果。

参考看看这个stackoverflow的问题