public class Testfloat {
public static void main(String[] args)
{
float f=275480.54f;
System.out.println(Float.toString(f));
}
}为啥输出结果是:275480.53
烦请各位解答一下,并说明原理,谢谢!
public static void main(String[] args)
{
float f=275480.54f;
System.out.println(Float.toString(f));
}
}为啥输出结果是:275480.53
烦请各位解答一下,并说明原理,谢谢!
23位可以表示24位(整数部分永远是1)
2^24=16777216
最后一位是不精确的,只能精确表示前面7位(10进制)
我把你的数据换成一个更容易了解的数据:
-262144.53 改成负数可以看到符号位, 262144正好是2^18方. float f=-262144.54f;
System.out.println(Integer.toBinaryString(Float.floatToIntBits(f)));
结果为:11001000100000000000000000010001 (32位,第一位为1表示负数)
计算(1+8+23):
-1.00000000000000000010001* 2^(145-127)
结果为1000000000000000000.10001
整数部分很容易理解,后面的小数部分
最后一个1表示的值为1/32=0.03125
所以后面的小数的最小间隔成了0.3,0.6这样的数据,而这些都不是精确的