为何未加'd'/'f'后缀时,小于1的数值赋值给double/float输出为0.0?
为什么Java中1/2赋值给float/double(无后缀)时输出0.0?
这事儿的核心原因是Java的整数除法规则,咱们对着你的代码一步步拆解就明白了:
首先得记住:在Java里,如果两个操作数都是整数类型(比如int),那么除法运算会执行整数除法——结果只保留整数部分,小数部分直接被丢弃,完全不会做四舍五入。所以1/2的计算结果是0,而不是你以为的0.5。
现在逐个看你的变量:
double a = 1/2d;:这里的2d是double类型,Java会自动把1(int类型)提升为double类型再做运算,所以实际是1.0 / 2.0,结果是0.5,赋值给a自然就是0.5。float b = 1/2f;:和上面同理,2f是float类型,1被提升为float,运算结果是0.5f,所以b的值是0.5。double c = 1/2;:这里1和2都是int类型,先执行整数除法得到0,然后Java会把这个int类型的0自动转换为double类型的0.0赋值给c,所以输出0.0。float d = 1/2;:同样的逻辑,先算1/2得到int的0,再自动转为float的0.0,所以d的输出是0.0。
如果想让1/2得到小数结果,你可以这么做:
- 给其中一个操作数加上浮点后缀,比如
1d/2、1/2f - 显式将其中一个操作数转为浮点类型,比如
(double)1/2、1/(float)2
内容的提问来源于stack exchange,提问作者Abhishek Kumar
相关产品推荐
相关产品推荐

