我只是在重新阅读Python 3.0 中的新增功能,它指出:
round() 函数舍入策略和返回类型已更改。精确的中途情况现在四舍五入到最接近的偶数结果,而不是远离零。(例如,round(2.5) 现在返回 2 而不是 3。)
和round的文档:
对于支持 round() 的内置类型,值被四舍五入到最接近的 10 的负 n 次方倍数;如果两个倍数同样接近,则朝偶数选择舍入
所以,在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 时一定有对此进行过一些讨论,但我无法找到一个很好的理由我的搜索。
- 有谁知道为什么会变成这个?
- 是否有任何其他主流编程语言(例如,C、C++、Java、Perl、 ..)可以进行这种(对我而言不一致的)舍入?
我在这里想念什么?
更新:@Li-aungYip 对“银行家的四舍五入”的评论给了我正确的搜索词/关键字来搜索,我发现了这个问题:为什么 .NET 使用银行家的四舍五入作为默认值?,所以我会仔细阅读。