为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

2 回答

涉及(计算)自动转型,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所允许的浮点数精度范围内

4 回复 有任何疑惑可以回复我~
#1

寂静的小白 提问者

非常感谢!
2015-03-12 回复 有任何疑惑可以回复我~
#2

寂静的小白 提问者

真的好高深,但是我居然看懂了!谢谢你
2015-03-12 回复 有任何疑惑可以回复我~
#3

寒蕊

很感谢~
2015-03-25 回复 有任何疑惑可以回复我~

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

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

2 回复 有任何疑惑可以回复我~
#1

寂静的小白 提问者

有什么区别呢?
2015-03-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信