double和float不能表达每个数值,他们是使用近似来表示值的。
考虑一下下面例子的输出内容
public classOne{
publicstaticvoidmain(String[] args)
{
double a = 1.000001;
doubleb = 0.000001;
doubled = a - b;
System.out.println(d);
System.out.println(d==1.0);
}
}
结果是false。Java程序员经常犯的一个错误是,在循环中使用浮点数和用==运算符检查条件,在最坏的情况下,这可能会创建一个无限循环,导致Java应用程序挂起。所以我们不应该用==进行精确比较,应该这样做:
public classOne{
publicstaticvoidmain(String[] args)
{
double a = 1.000001;
doubleb = 0.000001;
doubled = a - b;
if(Math.abs(d-1.0)<= 0.000001)
{
System.out.println("the are equal");
}
}
}
对于double值,我们应该做计算而不是比较,总是比较近似而不是精确的值。例如:当需要比较值是不是等于10.00的时候,我们用是否> 9.95来表示,如下所示:
if (amount == 100.00) // Not Ok
if (amount > 99.995) // Ok
参考文档
http://www.java67.com/2015/09/float-and-double-value-comparison-in-java-use-relational.html