为什么在Python 3.5中舍入(4.5)== 4和舍入(5.5)== 6?

Aiv*_*var 0 python floating-point floating-accuracy

看起来4.5和5.5在Python 3.5中都有精确的浮点表示:

>>> from decimal import Decimal
>>> Decimal(4.5)
Decimal('4.5')
>>> Decimal(5.5)
Decimal('5.5')
Run Code Online (Sandbox Code Playgroud)

如果是这样的话,为什么呢

>>> round(4.5)
4
>>> round(5.5)
6
Run Code Online (Sandbox Code Playgroud)

And*_*ndy 6

在Python 3中,精确的中间数字舍入到最接近的偶数结果.在Python 3中,行为已更改

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


Pat*_*ugh 5

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