A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李伟 中级黑马   /  2012-7-24 18:02  /  1969 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                               float f=1234567.899f;
                         System.out.println(f);//为什么输出结果是1234567.9
                System.out.println(f==1234567.899);//为什么结果是false
                                 //对于以上的两个结果有些不理解,出现这样的结果原理是什么呢?
                                

5 个回复

倒序浏览
本帖最后由 魏-玉-彪 于 2012-7-24 18:16 编辑

这个  System.out.println() 语句自动调用的 tostring()方法。 发生了转型。


                float f=1234567.899f;

             String s = String.valueOf(f);                         System.out.println(s);

  这样试试
            
        

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
对于浮点数,一个float数值占4个字节,32位,而且它并不是像表面上看的那么简单,再通,过一些运算符,精度会发生改变,我们看到的,就好像是四舍五入一样。而且,是不可能精确地定义一个浮点数的,也就是你定义了f=1234567.899f,这是一个模糊的,所以才会出现f!=1234567.899。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
System.out.println(f);//这句话将浮点型的f装箱成为String类型,值会发生改变,这样才操作 System.out.println(f==1234567.899);//结果肯定是false
回复 使用道具 举报
计算机只识别二进制数据,在把源数据编译成二进制数据后,就会造成精度的丢失。
精度丢失在于浮点数由两部分组成:指数和尾数。在转换过程长,浮点数参与了计算,进行浮点数的二进制与十进制转换,转换的过程就会变的不可预知。就是在这个过程中,发生了精度的丢失。
有时浮点计算也会出现准确的结果,那是因为恰巧计算的二进制与十进制之间能够准确转换
所以System.out.println(f),结果和原值不一样,System.out.println(f==1234567.899)结果当然就是false
回复 使用道具 举报
float 单精度浮点型占4个字节,有效数字最长7位,有效数字长度包括了整数部分和小数部分。
double 双精度浮点型数据占8个字节,有效数字最长15位。

float f=1234567.899f  1234567.899有效数字超过7位,所以会出现输出结果为1234567.9
的现象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马