public class Testfloat {

public static void main(String[] args)
{

float f=275480.54f;
System.out.println(Float.toString(f));

}
}为啥输出结果是:275480.53
烦请各位解答一下,并说明原理,谢谢!

解决方案 »

  1.   

    Float的存储(1位符号+8位指数+23位小数)
    23位可以表示24位(整数部分永远是1)
    2^24=16777216 
    最后一位是不精确的,只能精确表示前面7位(10进制)
      

  2.   

    float只能保证7位的精度,因为有10进制转化为2进制的问题
      

  3.   

    为了更清晰的说明问题:
    我把你的数据换成一个更容易了解的数据:
    -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这样的数据,而这些都不是精确的
      

  4.   

    修正楼上的,float是精确的,楼主默认把float类型和实数进行了比较.float的精确仅限于float.