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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔青山 中级黑马   /  2014-2-12 09:56  /  1131 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 乔青山 于 2014-2-12 10:52 编辑

        double b =Math.random()*3;
                if(b!=0){
                        double i = 1/b;                                                        
                        System.out.println(i);
                        System.out.println(b);
                }else{
                        System.out.println("ArithmeticException");
                }
这个程序输出的是正常的浮点数。
但是我把他改成这样:
        int b = (int)(Math.random()*3);
                if(b!=0){
                        double i = 1/b;                                                        
                        System.out.println(i);
                        System.out.println(b);
                }else{
                        System.out.println("ArithmeticException");
                }

当b随机为2的时候,输出的i是0.0
我想问一下这是为什么,1/2不应该得到0.5嘛,为什么输出的结果是0.0呢?

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

6 个回复

倒序浏览
。。为什么没人回答,又重试了一下,没问题啊,是输出0.0,为什么啊?

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

回复 使用道具 举报
1是整数、b也是整数,结果也会是整数,所以是0。
0在转为浮点就是0.0
明白了

回复 使用道具 举报
因为1和b两个的数据类型都是整形,两个整形做运算之后还是整形,所以0.5就变成0了,然后再赋值给一个double型,进行类型转换就变成0.0了
回复 使用道具 举报
试了下,真是这样,原因是不是在强转型的过程中丢失精度
回复 使用道具 举报
乔青山 发表于 2014-2-12 10:52
1是整数、b也是整数,结果也会是整数,所以是0。
0在转为浮点就是0.0
明白了

1/2的过程中就存在着一次自动浮点转型整形的过程,(int)0.5 = 0;--->   double i = 0;是这么个情况不
回复 使用道具 举报
戒爱 发表于 2014-2-12 12:29
1/2的过程中就存在着一次自动浮点转型整形的过程,(int)0.5 = 0;--->   double i = 0;是这么个情况不 ...

嗯,对的,就是这个意思,最后double i = 0.0
会把0转为浮点型0.0
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马