问答详情
源自:3-2 Java中的算术运算符

为什么输入double avg=sum/4;就是26.0而输入float avg=sum/4f;就是26.25

不懂,他们不是只是精确位数和占用大小不一样吗

提问者:寂静的小白 2015-03-11 18:21

个回答

  • dirtyR33
    2015-03-11 21:29:25
    已采纳

    涉及(计算)自动转型,char、byte计算时转成int(没有比int范围更广的long和精度更高的浮点数参与),其他的就是向精度更高的转型,int与long计算转型成long,int与float/double计算转型成float/double,float与double转型成double

    这里,我想sum应该是个整型吧(int/long),在计算double avg = sum/4; 时sum为int或long,除以4被转型为int/long类型,然后被赋值给精度更高的double类型,然而整型是没有浮点数部分的,因此小数部分在后面计算(sum/4)时就已经被丢弃了,只保留了整数部分并赋值给double

    而float avg = sum/4f;后面sum/4f时明确指定了除数是一个float类型的浮点数,那么这个计算会被转型成精度更高的float进行计算(即把sum也作float类型进行除运算),因此结果会保留到float所允许的浮点数精度范围内

  • Au_ww
    2015-03-11 18:43:44

    第一个是 (double)(sum/4)

    第二个是 (float)((float)sum/(float)4)