黑马程序员技术交流社区

标题: 关于double类型的小问题 [打印本页]

作者: Kewin.java    时间: 2015-3-21 18:34
标题: 关于double类型的小问题
本帖最后由 Kewin.java 于 2015-3-21 18:34 编辑

为什么两个结果的值会不一样?
class DoubleTest
{
        public static void main(String[] args)
        {
                double x = 0, y= 0, a = 10, b = 3;
                x = a / b;
                y = 10 /3;
                System.out.println("x="+x);  //x=3.3333333333333335
                System.out.println("y="+y);  //y=3.0
        }
}



作者: 陈捷旋    时间: 2015-3-21 19:09
10和3都是整型的数,所以出来是整数,a和b你声明了是double所以能出来小数
作者: 妖妖    时间: 2015-3-21 19:50
当我们我们进行除法运算的时候,int/int 是int类型    float/int是float 类型   double/int 是double类型   int/float是float类型。10和3(非声明中a与b的值,因为在声明中double a=10;已经声明成了double类型)都是两个int类型的数据,进行相除的时候实际上是会生成一个int类型的数据,但是在声明的时候y是double类型的,在此过程中就会有一个类型自动提升的过程。
作者: kkqisheng    时间: 2015-3-21 21:03
楼上的总结得很好,记下来了:D
作者: 嘛嘛咪阿    时间: 2015-3-21 21:08
3楼总结的很全面,整型和整型相除得到的只能是整型,java里面有很多这样的隐式类型变换,遇到了记住就行
作者: xiaogougou    时间: 2015-3-21 21:56
x=a/b,a和b都是double类型的,a/b也是double类型的,所以结果是x=3.3333333333333335
作者: xiaogougou    时间: 2015-3-21 21:58
xiaogougou 发表于 2015-3-21 21:56
x=a/b,a和b都是double类型的,a/b也是double类型的,所以结果是x=3.3333333333333335

y=10/3,10和3默认是int类型的,等于3,然后强制转换成double类型的赋给y,结果就是3.0了。
作者: qsmaxmin    时间: 2015-3-21 22:01
涨姿势了。。
作者: jiandonn    时间: 2015-3-21 22:12
x=a/b,a和b都是double类型的,a/b也是double类型的,所以结果是x=3.3333333333333335
作者: 20091042219    时间: 2015-3-21 22:20
  float 与int都是占4个8位的二进制,但因为 float有小数,所以它们运算的结果为 float类型,double是占8个8位的二进制,所以和int运算的结果类型为double的
作者: 夜班心桥    时间: 2015-3-21 23:02
a和b都是double类型,所以得到这个结果肯定没问题。至于,y=10/3;10和3都是默认类型int,所以得出的结果为3,但是y为double类型,所以类型提升,结果为3.0。希望能帮助到您!
作者: Kewin.java    时间: 2015-3-21 23:34
妖妖 发表于 2015-3-21 19:50
当我们我们进行除法运算的时候,int/int 是int类型    float/int是float 类型   double/int 是double类型   ...

解释的很详细,很全啊,受教了。
作者: wkz_crystal    时间: 2015-3-22 02:19
最简单的理解就是 y = 10 /3,10和3默认都是整型,除的结果自然也是整型,类型自动提升了……
作者: smile2015    时间: 2015-3-22 03:02
因为定义x、a、b是double 类型,结果出来肯定是上面的结果,而下面直接用的是整数int 10/3,得到的结果给了y,但y是double,所以是3.0




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