You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用str()转换浮点数时平均值小数位异常问题

Python浮点数精度问题与解决方法

你遇到的是典型的二进制浮点数精度限制问题:大部分十进制小数无法被二进制浮点数精确存储,在累加、除法等运算后,微小的误差会被放大,导致str()转换后出现多余的小数位。

以下是几种实用的解决办法:

方法1:用round()函数截断小数位

直接对计算结果保留两位小数,修改后的代码如下:

total_bmi = 0

for bmi in bmis:
  total_bmi += float(bmi)

average_bmi = total_bmi / len(bmis)
print("Average BMI: " + str(round(average_bmi, 2)))

方法2:使用字符串格式化输出

通过格式化语法直接控制输出的小数位数,比str()+round()更直观,推荐使用:

写法1(f-string,Python3.6+)

total_bmi = 0

for bmi in bmis:
  total_bmi += float(bmi)

average_bmi = total_bmi / len(bmis)
print(f"Average BMI: {average_bmi:.2f}")

写法2(format方法)

total_bmi = 0

for bmi in bmis:
  total_bmi += float(bmi)

average_bmi = total_bmi / len(bmis)
print("Average BMI: {:.2f}".format(average_bmi))

方法3:用decimal模块做高精度计算

如果需要从根源避免浮点数累加误差(比如处理金融类高精度需求),可以使用decimal模块:

from decimal import Decimal, getcontext

# 设置计算精度,根据需求调整
getcontext().prec = 4

total_bmi = Decimal(0)

for bmi in bmis:
  total_bmi += Decimal(bmi)

average_bmi = total_bmi / len(bmis)
print("Average BMI: {:.2f}".format(average_bmi))

内容的提问来源于stack exchange,提问作者Sal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:05:10