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
相关产品推荐
相关产品推荐

