在Java中,浮点运算没有精确表示。例如下面的java代码:
float a = 1.2;
float b= 3.0;
float c = a * b;
if(c == 3.6){
System.out.println("c is 3.6");
}
else {
System.out.println("c is not 3.6");
}
打印“c不是3.6”。
我对超过3位小数(#。###)的精度不感兴趣。如何处理该问题以乘以浮点数并可靠地对其进行比较?
最佳答案
一般规则是,永远不要像(a == b)这样比较浮点数,而应该像(Math.abs(a-b) < delta)
这样比较,其中delta是一个很小的数字。
具有十进制固定位数的浮点值不必具有二进制固定位数。
另外为清楚起见:
尽管严格的浮点数==
比较几乎没有实际意义,但严格的<
和>
比较却是一个有效的用例(示例-当某些值超过阈值时触发逻辑:(val > threshold) && panic();
)