Java编程中除法运算相同公式代入不同数值返回结果不一致问题
问题原因解释
这个现象和运算符优先级无关,核心是Java中整数除法的取整规则导致的:Java里两个int类型做除法时,会直接舍弃小数部分,只保留整数结果,不会做四舍五入处理。
2296场景运算拆解
- 第一个公式
(2296 * 100 )/2296:
先算乘法得到229600,再除以2296刚好整除,结果为100,符合预期。 - 第二个公式
(2296/(2296/100)):
先计算括号内的2296/100,整数除法下结果是22(准确值22.96的小数部分会被直接舍弃),再用2296除以22,得到结果104(22*104=2288,剩余的8会被舍弃),所以最终输出104。
1500场景运算拆解
- 第一个公式
(1500 * 100 )/1500:
乘法得到150000,除以1500刚好整除,结果为100。 - 第二个公式
(1500/(1500/100)):
括号内1500/100刚好整除得到15,再用1500除以15得到100,所以两个公式结果一致。
修复方案
如果想要两个公式结果一致,可以把参与运算的数值强转为浮点型,避免整数除法的取整误差,示例代码如下:
public class testpercent { public static void main(String args[]) { System.out.println("first formula ===>"+(2296 * 100.0 )/2296); System.out.println("alternate formula =====>" + (2296/(2296/100.0))); } }
运行后两个公式都会输出100.0。
内容的提问来源于stack exchange,提问作者loke
相关产品推荐
相关产品推荐

