class Test{
public static void main(String[] args){
float f1=3.2f;
float f2=6.5f;
if(f1==3.2){
System.out.println("same");
}else{
System.out.println("different");
}
if(f2==6.5){
System.out.println("same");
}else{
System.out.println("different");
}
}
}
输出:
different
same
为什么输出是这样的?我预计 same
作为第一种情况的结果。
原文由 PSR 发布,翻译遵循 CC BY-SA 4.0 许可协议
不同之处在于 6.5 可以用 float 和 double 精确表示,而 3.2 不能用任何一种类型精确表示。并且两个最接近的近似值不同。
float 和 double 之间的相等比较首先将 float 转换为 double,然后比较两者。所以数据丢失。
您不应该比较浮点数或双精度数是否相等;因为您不能真正保证分配给 float 或 double 的数字是准确的。
_这种舍入误差是浮点计算的一个特征_。
检查 每个计算机科学家应该了解的有关浮点运算 的更多信息!