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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一帆风顺 中级黑马   /  2012-9-17 09:50  /  1723 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王博 于 2012-9-18 07:27 编辑

public class Convert
{
        public static void main(String[] args)        {
                int numi1 = 2,numi2 = 3;
                System.out.println(numi1/numi2);
                System.out.println((float)numi1/numi2);
                int numi3 = 999999999;
                float numf1;
                numf1 = numi3;
                System.out.println((int)numf1);
        }   
}

给的输出结果是
0
0.6666667
1000000000

前两个的结果知道,第三个的结果是怎么来的啊?是通过进位么?那怎么进的啊?

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

4 个回复

倒序浏览
float 精度不高, 代码是先将 INT 强制转换成 FLOAT ,再赋值, 转换后 9.99999999 * E9 ,
然后 ,再显示转换后 , 变成 100000000 ; 类似于 1.0 打印后显示 0.999999998 ,什么
的这种。 使用 DOUBLE 进行转换就会显示正确结果。 已经用实例自己试过了,不过还是头大
,讲错了不要见怪。
回复 使用道具 举报
本帖最后由 宫明星 于 2012-9-17 15:51 编辑

我试了下,楼主代码打错了好几个println打错字pintln
float打错了flout。

最后一个不加int转换的话输出的是1.0E9 说明在numf1 = numi3赋值的过程中已经把
999999999转换成了1000000000.
  1. public class Convert
  2. {
  3.         public static void main(String[] args)        
  4.         {
  5.                 int n = 999999999;
  6.                 float f;
  7.                 f = n;
  8.                 System.out.println((float)n);
  9.                 System.out.println(f);
  10.                 System.out.println((int)f);
  11.         }   
  12. }
复制代码
输出是1.0E9,1.0E9,1000000000
该是int型转换float造成的。
具体原因我再找找。
这次我也学到了点东西

自己找了很久,发现有个说法可能靠谱:
如果一个数路够大,因为浮点在java中占32位,其中第一位是符号位,当数足够大的时候,分数部分最先损失,然后是整数部分。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
我也不理解,自己试验,还是不行!不过,楼主的代码写错了! System.out.pintln(numi1/numi2);         应该是println
System.out.pintln((flout)numi1/numi2);         应该是float
希望以后多细心点!


回复 使用道具 举报
写错的地方虚心接受,问题已经明白,谢谢大家
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马