round函数未正常取整?均值计算取整结果异常排查
解决均值函数返回错误整数结果的问题
看起来你踩了Python整数除法的坑!咱们先拆解下问题出在哪:
你的代码里,sum / len(lst)这一步在Python 2环境下会执行整数除法——因为sum和len(lst)都是整数,哪怕你之后把结果转成float,除法的结果已经是整数3(13÷4=3),转成float后就是3.0,再round自然得到3.0,而不是你预期的3.25。另外提醒下:尽量别用sum当变量名,会覆盖Python内置的sum()函数,容易引发其他问题。
修正方案
这里有两种简单的解决办法:
1. 提前将其中一个操作数转为浮点数
把除法操作中的总和先转成float,这样除法会得到精确的浮点数结果:
def mean(lst, decimals): total = 0 for item in lst: total += item mean_value = round(float(total) / len(lst), decimals) print(mean_value)
2. 启用Python 3风格的真除法
如果是在Python 2环境下,可以在文件开头加上这行代码,强制让除法行为和Python 3一致(整数相除也会返回浮点数):
from __future__ import division def mean(lst, decimals): total = 0 for item in lst: total += item mean_value = round(total / len(lst), decimals) print(mean_value)
测试验证
运行修正后的代码,输入mean([5, 3, 3, 2], 2),就能得到你预期的3.25啦!
内容的提问来源于stack exchange,提问作者Alexander Smith
相关产品推荐
相关产品推荐

