黑马程序员技术交流社区

标题: 整数浮点数的一个小问题 [打印本页]

作者: 乔青山    时间: 2014-2-12 09:56
标题: 整数浮点数的一个小问题
本帖最后由 乔青山 于 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呢?

作者: 乔青山    时间: 2014-2-12 10:10
。。为什么没人回答,又重试了一下,没问题啊,是输出0.0,为什么啊?
作者: 乔青山    时间: 2014-2-12 10:52
1是整数、b也是整数,结果也会是整数,所以是0。
0在转为浮点就是0.0
明白了


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

1/2的过程中就存在着一次自动浮点转型整形的过程,(int)0.5 = 0;--->   double i = 0;是这么个情况不
作者: 乔青山    时间: 2014-2-12 15:32
戒爱 发表于 2014-2-12 12:29
1/2的过程中就存在着一次自动浮点转型整形的过程,(int)0.5 = 0;--->   double i = 0;是这么个情况不 ...

嗯,对的,就是这个意思,最后double i = 0.0
会把0转为浮点型0.0




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2