8
2018-07-12 17:24:25 +08:00 1
@theochoi 0.1 + 0.2
System.out.println("Max: " + Integer.toString(Float.floatToIntBits(Float.MAX_VALUE), 2));
System.out.println("1f: " + Integer.toString(Float.floatToIntBits(1f), 2));
System.out.println("0.1f: " + Integer.toString(Float.floatToIntBits(0.1f), 2));
System.out.println("0.2f: " + Integer.toString(Float.floatToIntBits(0.2f), 2));
System.out.println("0.1f + 0.2f: " + Integer.toString(Float.floatToIntBits(0.1f + 0.2f), 2));
System.out.println("0.3f: " + Integer.toString(Float.floatToIntBits(0.3f), 2));
System.out.println("1d: " + Long.toString(Double.doubleToLongBits(1d), 2));
System.out.println("0.1d: " + Long.toString(Double.doubleToLongBits(0.1d), 2));
System.out.println("0.2d: " + Long.toString(Double.doubleToLongBits(0.2d), 2));
System.out.println("0.1d + 0.2d: " + Long.toString(Double.doubleToLongBits(0.1d + 0.2d), 2));
System.out.println("0.3d: " + Long.toString(Double.doubleToLongBits(0.3d), 2));
个人理解:
0.1d+0.2d 的时候各自都比较精细,导致了一个更精细的 2 进制值,而这个值又不是和显示 0.3d 对应的值相同。