首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python3.x舍入行为

Python3.x舍入行为
EN

Stack Overflow用户
提问于 2012-05-31 00:11:09
回答 13查看 101.9K关注 0票数 229

我只是重读了一下Python3.0的新特性是什么?,上面写着:

圆()函数舍入策略和返回类型已经改变。精确的一半情况现在被四舍五入到最接近的结果,而不是远离零。(例如,第(2.5)轮现在返回2而不是3)。

以及圆角的文档

对于支持循环()的内置类型,值被舍入到与幂减n最接近的倍数;如果两个倍数相等,则对偶数选择进行舍入。

所以,在v2.7.3下

代码语言:javascript
运行
复制
In [85]: round(2.5)
Out[85]: 3.0

In [86]: round(3.5)
Out[86]: 4.0

就像我预料的那样。但是,现在在v3.2.3

代码语言:javascript
运行
复制
In [32]: round(2.5)
Out[32]: 2

In [33]: round(3.5)
Out[33]: 4

这似乎违反了直觉,也与我对四舍五入的理解背道而驰(而且肯定会让人绊倒)。英语不是我的母语,但在我读到这篇文章之前,我以为我知道四舍五入意味着什么:-/我确信在引入v3时,一定有过一些关于这个问题的讨论,但我在搜索中找不到一个很好的理由。

  1. 有谁能洞察到为什么会变成这样吗?
  2. 还有其他主流编程语言(例如C、C++、Java、Perl、.)吗?做这种(对我来说不一致的)四舍五入?

我在这里错过了什么?

更新:@Li-aungYip的评论--“银行家的四舍五入”--给了我正确的搜索词/关键词,我发现了这个问题:为什么.NET使用银行家的四舍五入作为违约?,所以我会仔细阅读。

EN

Stack Overflow用户

回答已采纳

发布于 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命令。:-)

票数 213
EN
查看全部 13 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10825926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档