代码运算结果恒为0求助:b=((a/n)*100)无论a、n取值均返回0
问题根源分析
- 核心原因是整数除法的截断特性:在C、C++、Java、Go等支持静态整数类型的编程语言中,如果
a和n都为整数类型(如int、long),当a < n时,a/n执行的是整数除法,会直接舍弃结果的小数部分返回整数,最终得到0,再乘以100结果自然始终为0。 - 即使
a的取值偶尔接近n,只要a/n的运算结果小于1,都会触发截断得到0,和你描述的运行现象完全匹配。
修复方案
仅需调整计算逻辑,避免先执行整数除法即可,常见两种修改方式:
- 调整计算顺序,先乘后除:
b = (a * 100) / n;(该方案仅适用于a*100不会超过当前整数类型取值上限的场景) - 先做强制类型转换再执行浮点除法:
b = ((double)a / n) * 100;(把其中一个操作数转为浮点类型后,除法会按浮点运算规则执行,不会截断小数部分,兼容性更强)
内容的提问来源于stack exchange,提问作者Cu be
相关产品推荐
相关产品推荐

