请教大家double a=89,b=90,c=60;
double avg=((a+b+c)/3);
System.out.println(avg);
输出结果是79.66666666666667
int a=89,b=90,c=60;
double avg=(a+b+c)/3;
System.out.println(avg);
结果是79.0
为什么呢?

解决方案 »

  1.   

    double/int = double
    所以上面的计算出的是一个double值而下面
    int/int = int
    下面计算出来的是int值。然后转成double,所以小数字后面的都丢失了。
      

  2.   

    自动转型的问题
    (a+b+c)/3 还是int类型的,计算结果被自动转型为double
    double a=89==>a=89.00...
      

  3.   

    这是类型转换的问题,
    这两个结果都被转换为了double,但是转换的时间不一样,所以结果不一样。
      

  4.   

    Java中有这样一个法则“当除法运算符用于两个整数时,就表示整数除法,否则,表示浮点数除法”。double avg=((a+b+c)/3),外层括号里面保持运算结果的原样,在此时除法运算,所以就是79.66666666666667。在double avg=(a+b+c)/3就表示整数除法,所以取的是double类型的商数79.0