Python3 四舍五入到最接近的偶数
Python3.4在处理四舍五入的时候,会选择最接近的偶数(在遇到平局的情况下)。
>>> round(1.5)
2
>>> round(2.5)
2
不过,这种情况似乎只发生在四舍五入到整数的时候。
>>> round(2.75, 1)
2.8
>>> round(2.85, 1)
2.9
在上面的最后一个例子中,我本来期待四舍五入到最接近的偶数时,结果是2.8。
为什么这两种行为之间会有差异呢?
3 个回答
0
关于标题的问题... 如果你使用 int(n)
,它会向零方向截断。如果结果是奇数,那么你需要加一:
n = 2.7 # your whatever float
result = int(n)
if (result & 1):
result += 1
更新:是的,负数会有一个错误。而且对于已经是整数的数字也会有问题。这个就留给你自己去研究了。:)
1
Martijn说得非常对。如果你想要一个整数四舍五入的方法,让它总是四舍五入到最近的偶数,那么我推荐使用这个:
def myRound(n):
answer = round(n)
if not answer%2:
return answer
if abs(answer+1-n) < abs(answer-1-n):
return answer + 1
else:
return answer - 1
33
浮点数其实只是一个个近似值;比如说,2.85并不能被准确地表示出来:
>>> format(2.85, '.53f')
'2.85000000000000008881784197001252323389053344726562500'
它实际上稍微大于2.85。
像0.5和0.75这样的数可以用二进制分数准确表示(分别是1/2和1/2 + 1/4)。
round()
这个函数在文档中明确说明了这一点:
注意:对于浮点数,
round()
的表现可能会让人感到意外:比如,round(2.675, 2)
的结果是2.67
,而不是大家预期的2.68
。这并不是一个错误,而是因为大多数小数在浮点数中无法被准确表示。想了解更多信息,可以查看浮点运算:问题和局限性。