当我在 Java 中尝试以下代码时:
System.out.println("0.1d/0.3d is " + 0.1d/0.3d)
System.out.println("0.1f/0.3d is " + 0.1f/0.3d)
我得到以下输出:
0.1d/0.3d is 0.33333333333333337
0.1f/0.3d is 0.3333333383003871
如果 float/double 应该得到 double,那么在这种情况下 float/double 应该与 double/double 相同。
只需执行以下代码即可查看要检查的数字的二进制字符串:
System.out.println(Long.toBinaryString(Double.doubleToLongBits(0.1d)));
System.out.println(Integer.toBinaryString(Float.floatToIntBits(0.1f)));
输出:
11111110111001100110011001100110011001100110011001100110011010
111101110011001100110011001101
你会看到浮点位和双位的区别。所以对于更长的精度值,我们无法获得相同的 float/double 和 double/double 结果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句