栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python round函数小bug探讨

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python round函数小bug探讨

首先来简单介绍下round这个函数。

1. 语法

round( x [, n]  )

2. 参数

  • x -- 数值表达式。
  • n -- 数值表达式,表示从小数点位数。

3. 返回值

返回浮点数x的四舍五入值。

4. 实例

 

最近在刷NCT的PYTHON等级考试题目,在使用round这个非常不起眼的四舍五入常规函数时候发觉了一件很有意思的事情,即在某些时候.5并不会五入,反而变成了四舍。具体看下如下两个例子

在这两个例子我发觉很奇怪的现象,照道理0.5四舍五入应该是1,而2.25保留一位的四舍五入应该是2.3,而实际得到的结果与我们的数学尝试都不相符,这是为什么呢???

查阅了Python的文档后,发现这个问题其实是由Python版本所导致。这个问题只存在于Pyhon3中,而Python2中则一切正常。我们先来看下如下文档的描述。

 

在python2.7的doc中,round()的最后写着,"Values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done away from 0." 保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。

但是到了python3.5的doc中,文档变成了"values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice." 如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。

紧接着我们分别在Python2/3中做实验去验证一下

版本:Python 3.10

版本:Python 2.7

 

 

所以如果有项目是从python2.x迁移到python3.x的,可要注意一下round的地方(当然,还要注意/和//,还有print,还有一些比较另类的库)!!!!!!

基于目前存在的这种情况,尽量避免使用round函数,我通过网络整理了下如下可供大家参考

  • 使用math模块中的一些函数,比如math.ceiling(天花板除法)。
  • python自带整除,python2中是/,3中是//,还有div函数。
  • 字符串格式化可以做截断使用,例如 "%.2f" % value(保留两位小数并变成字符串……如果还想用浮点数请披上float()的外衣)。
  • 当然,对浮点数精度要求如果很高的话,请用嘚瑟馍,不对不对,请用decimal模块。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/861237.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号