15 回答

TA贡献1条经验 获得超2个赞
语句执行顺序为,,先计算num1+num2结果是int类型,然后计算/2(int/int=int),结果还是int,但是结果是87,小数点后面的丢失了。然后再赋值给avg将87转换为double型87.0.
但是如果(num1+num2)/2.0就是(int/double=double)就不会发生数据丢失了,就会是87.5.

TA贡献1条经验 获得超0个赞
语句执行顺序为:先计算num1+num2结果是int类型,然后计算/2(int/int=int),结果还是int,但是结果是87,小数点后面的丢失了。然后再赋值给avg将87转换为double型87.0.
但是如果(num1+num2)/2.0就是(int/double=double)就不会发生数据丢失了,就会是87.5.

TA贡献18条经验 获得超10个赞
因为num1和num2都是整形的,所以在(num1+num2)/2这些步距都是整形的,此时计算答案已经是87了,但如果除以 2.0就不一样了,一个整形数据和浮点型数据乘除会自动进行类型转换,结果会是浮点型,

TA贡献5条经验 获得超0个赞
double num1,double num2 就可以了 或者只选择其中一个这样定义
在计算avg的时候 int 转换double 小数点后面的数会舍掉 在这里就没有四舍五入这种说法了。所以是87.0

TA贡献1条经验 获得超0个赞
(num1+num2)/2结果是int类型(两个整数取模总会吧?)为87,赋值给avg后自动类型转换成double类型为87.0;(num1+num2)/2.0结果就是double类型不用类型转换,为87.5.

TA贡献223条经验 获得超56个赞
你可以分开看这段代码,
(num1+num2)/2 分母和分子都是整型 那么结果肯定是整型。 当你分母是double类型的时候,程序会先根据你的返回类型将你的分母或者分子做一个隐式的类型转换。
添加回答
举报