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

来源:3-2 Java中的算术运算符

寂静的小白

2015-03-11 18:21

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

写回答 关注

2回答

  • 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所允许的浮点数精度范围内

    寒蕊

    很感谢~

    2015-03-25 16:07:00

    共 3 条回复 >

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

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

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

    寂静的小白

    有什么区别呢?

    2015-03-11 18:56:43

    共 1 条回复 >

Java入门第一季(IDEA工具)升级版

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

1165172 学习 · 17581 问题

查看课程

相似问题