Why round(4.5) == 4 and round(5.5) == 6 in Python 3.5?

时间:2016-10-04 14:43:44

标签: python floating-point floating-accuracy

Looks like both 4.5 and 5.5 have exact float representations in Python 3.5:

>>> from decimal import Decimal
>>> Decimal(4.5)
Decimal('4.5')
>>> Decimal(5.5)
Decimal('5.5')

If this is the case, then why

>>> round(4.5)
4
>>> round(5.5)
6

?

2 个答案:

答案 0 :(得分:5)

在Python 3中,精确的中途数字四舍五入到最接近的偶数结果。这behavior changed in Python 3

  

round()函数舍入策略和返回类型已更改。确切的中途情况现在四舍五入到最接近的偶数结果而不是零。 (例如,round(2.5)现在返回2而不是3.)round(x [,n])现在委托给x。 round ([n])而不是总是返回一个float。它通常在使用单个参数调用时返回一个整数,并在使用两个参数调用时返回与x相同类型的值。

答案 1 :(得分:3)

Python 3使用Bankers Rounding,它将.5值舍入到最接近的偶数。