我只是重读了一下Python3.0的新特性是什么?,上面写着:
圆()函数舍入策略和返回类型已经改变。精确的一半情况现在被四舍五入到最接近的结果,而不是远离零。(例如,第(2.5)轮现在返回2而不是3)。
以及圆角的文档
对于支持循环()的内置类型,值被舍入到与幂减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时,一定有过一些关于这个问题的讨论,但我在搜索中找不到一个很好的理由。
我在这里错过了什么?
更新:@Li-aungYip的评论--“银行家的四舍五入”--给了我正确的搜索词/关键词,我发现了这个问题:为什么.NET使用银行家的四舍五入作为违约?,所以我会仔细阅读。
发布于 2012-05-31 00:24:15
Python3的方式(称为"第二轮对半平“或”银行家的四舍五入“)现在被认为是标准的舍入方法,尽管一些语言实现还没有出现在总线上。
简单的"总是向上0.5圈“技术导致了对较高数字的轻微偏倚。通过大量的计算,这可能是非常重要的。Python3.0方法消除了这个问题。
常用的舍入方法不止一种。IEEE 754是浮点数学的国际标准,它定义了五种不同的舍入方法 (Python3.0使用的标准是默认的)。和还有其他人。
这种行为并没有像它应有的那样广为人知。如果我没记错的话,AppleScript是这种舍入方法的早期采用者。AppleScript中的命令提供了几个选项,但圆角甚至是默认的,就像在IEEE 754中一样。显然,实现round命令的工程师已经厌倦了所有“让它像我在学校里学到的那样工作”的请求,他实现的就是:round 2.5 rounding as taught in school是一个有效的AppleScript命令。:-)
https://stackoverflow.com/questions/10825926
复制相似问题