我只是在重新阅读Python 3.0的新增功能,它指出:
round()函数的舍入策略和返回类型已更改。现在,精确的中途案例将舍入到最接近的偶数结果,而不是从零舍入。(例如,round(2.5)现在返回2而不是3。)
round()
以及关于round的文档:
对于支持round()的内置类型,将值四舍五入为乘幂n的最接近10的倍数;如果两个倍数相等接近,则四舍五入取整为偶数选择
因此,在v2.7.3下:
In [85]: round(2.5) Out[85]: 3.0 In [86]: round(3.5) Out[86]: 4.0
如我所料 但是,现在在v3.2.3下:
In [32]: round(2.5) Out[32]: 2 In [33]: round(3.5) Out[33]: 4
这似乎是违反直觉的,与我对四舍五入(并可能绊倒人)的理解相反。英语不是我的母语,但是直到我读了这本书,我才认为我知道四舍五入的含义:-/我确信在引入v3时一定对此进行了一些讨论,但是我找不到很好的理由。我的搜索。
Python 3.0的方法被认为是标准的舍入方法,尽管某些语言实现尚未上市。
简单的“始终向上取整0.5”技术会导致对较高数值的轻微偏向。通过大量计算,这可能很重要。Python 3.0方法消除了这个问题。
常用的舍入方法不止一种。浮点数学的国际标准IEEE 754定义了五种不同的舍入方法(Python 3.0使用的是默认的一种)。还有其他。
这种行为并未得到应有的广泛了解。如果我没记错的话,AppleScript是这种舍入方法的早期采用者。roundAppleScript中的命令实际上确实提供了几个选项,但IEEE 754中的默认设置是“ tooth- roundto-to -even”。默认情况下,实现该命令的工程师对所有请求都感到厌倦,“使它像我在中学到的那样工作”。他实现的“学校”:round 2.5 rounding as taught in school是有效的AppleScript命令。
roundAppleScript
“ tooth- roundto-to -even”
round 2.5 rounding as taught in school