为何两段等效Python代码输出不同?输入13,179,0结果差异解析
两段Python程序计算结果差异的原因解析
当输入数值13、179、0时,两段看似功能等效的Python程序输出结果不一致:第一段输出202 26(结果错误),第二段输出202 27(结果正确)。以下是两段代码及差异原因解析:
两段代码对比
P = int(input()) X = int(input()) Y = int(input()) # 第一段程序输出 202 26(错误) summ = int((X * 100 + Y) * ((100 + P) / 100)) rub = summ // 100 kop = summ % 100 print(rub, kop) # 第二段程序输出 202 27(正确) money_before = 100 * X + Y money_after = int(money_before * (100 + P) / 100) print(money_after // 100, money_after % 100)
差异原因分析
核心问题出在浮点数精度损失和运算顺序上:
- 先明确理论正确结果:我们需要计算的是
(179*100 + 0) * (100+13)/100 = 17900 * 1.13 = 20227。 - 第一段代码中,
(100 + P)/100会生成浮点数1.13,但计算机的二进制浮点数无法完全精确表示所有十进制小数。当17900 * 1.13执行浮点数运算时,实际得到的是类似20226.999999999996的近似值,用int()转换会直接截断小数部分,最终得到20226,拆分后输出202 26。 - 第二段代码中,先执行
money_before * (100 + P),也就是17900 * 113——这是纯整数运算,结果为精确的2022700。再除以100得到20227.0,这个浮点数是精确的整数值,int()转换后得到20227,拆分后输出202 27。
简单来说,第一段先做浮点数乘法引入了精度误差,第二段通过调整运算顺序,先用整数乘法保证精度,再做除法得到精确结果,避免了误差。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

