Python中22313.6/0.8除法结果异常,咨询原因与解决方法
为什么22313.6/0.8在Python中得不到预期的整数27892?
问题原因
这是二进制浮点数的精度限制导致的。计算机用二进制存储浮点数,但很多十进制小数(比如0.8、22313.6)无法被二进制精确表示,只能存储它们的近似值。
比如你可以打印这两个数的实际存储值:
print(22313.6) # 输出22313.599999999998 print(0.8) # 输出0.80000000000000004
当这两个近似值相除时,结果自然会偏离精确的27892,得到类似27891.999999999996这样的浮点数。
解决方法
这里有几种可靠的解决方式:
转换为整数运算:把两个数都放大10倍,转成整数后再相除,完全避开浮点数精度问题:
result = 223136 // 8 print(result) # 输出27892使用decimal模块精确计算:这个模块专门用于处理高精度的十进制运算,能精准表示十进制小数:
from decimal import Decimal num1 = Decimal('22313.6') num2 = Decimal('0.8') result = num1 / num2 print(result) # 输出27892对结果四舍五入:如果只是这个特定场景,也可以直接对浮点数结果做四舍五入,但注意这种方法只适用于误差极小的情况:
result = round(22313.6 / 0.8) print(result) # 输出27892
内容的提问来源于stack exchange,提问作者Behnam Dabagh
相关产品推荐
相关产品推荐

