【问题标题】:Why round(4.5) == 4 and round(5.5) == 6 in Python 3.5? [duplicate]为什么在 Python 3.5 中使用 round(4.5) == 4 和 round(5.5) == 6? [复制]
【发布时间】:2016-10-04 14:43:43
【问题描述】:

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

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

如果是这样,那为什么

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

?

【问题讨论】:

  • 银行家的四舍五入。你四舍五入到最接近的偶数

标签: python floating-point floating-accuracy


【解决方案1】:

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

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

【讨论】:

  • 我认为这可以使用带有round函数的str来解决,str(round(value))
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多