class MagicWithOperators{
public static void main(String[] args) {
float f = 10.2F;
double d = 10.2;
System.out.println(f==d);
}
}
输出:false
。
为什么10.2f==10.2
为假但10.0f==10.0
为真?
答案 0 :(得分:2)
原因是使用10.2
或float
表示无法准确表示值double
。两者都是10.2的不同近似值,在数学上不相等。
true
和10.0f
10.0
的原因是10可以在float
和double
表示中完全表示。
以下是上述所有数字的十六进制表示。
41233333 // 10.2f (float, inexact)
4024666666666666 // 10.2 (double, inexact)
4024666660000000 // 10.2f (widened to double, inexact)
41200000 // 10.0f (float, exact)
4024000000000000 // 10.0 (double, exact)
4024000000000000 // 10.0f (widened to double, exact)
转化是使用Integer.toHexString(Float.floatToIntBits())
和Long.toHexString(Double.doubleToLongBits)
完成的。