Java算术运算问题:3/2*3赋值给double为何输出3.0而非4.5
运算结果问题解答
你提供的代码如下:
public class YourClassNameHere { public static void main(String[] args) { double x = 3 / 2 * 3; System.out.printf("%.1f", x); } }
输出结果为3.0而非4.5的核心原因是Java的整数除法规则,具体逻辑如下:
- Java中
/和*属于同级运算符,按照从左到右的顺序执行,因此代码会先计算3 / 2,再将结果乘以3。 - 代码中的
3和2都是int类型的字面量,两个整数执行除法运算时会触发整数截断规则:直接舍弃小数部分,只保留整数结果,因此3 / 2的运算结果是int类型的1,不是1.5。 - 接下来执行
1 * 3,依然是int类型的整数运算,得到结果int类型的3。 - 最后将int类型的3赋值给double类型的变量x时,才会触发自动类型转换,得到3.0,因此最终输出结果为3.0。
如果需要得到4.5的结果,只需要让除法环节执行浮点运算即可,可选修改方案如下:
- 将其中一个运算数改为浮点字面量:
double x = 3.0 / 2 * 3; - 对第一个运算数强制转型为浮点型:
double x = (double)3 / 2 * 3;
内容的提问来源于stack exchange,提问作者Jerome Quah
相关产品推荐
相关产品推荐

