如何比较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的问题