知行编程网知行编程网  2022-08-12 06:30 知行编程网 隐藏边栏  11 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python的round函数怎么用的相关知识,包括python里的round函数,以及round函数python怎么舍入这些编程知识,希望对大家有参考作用。

如何使用python的round函数

舍入函数非常简单,近似一个小数点后几位的浮点数。例如

>>> round(10.0/3, 2)
3.33
>>> round(20/7)
3

第一个参数是浮点数,第二个参数是保留的小数位数,可选,如果不写,默认保留为整数。

这么简单的函数,能有什么坑呢?


1、round的结果跟python版本有关

我们来看看python2和python3中有什么不同:

$ python
Python 2.7.8 (default, Jun 18 2015, 18:54:19) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> round(0.5)
1.0
$ python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> round(0.5)

如果我们阅读一下python的文档,里面是这么写的:

在 python2.7 文档中,round() 的末尾说,“值四舍五入到最接近的 10 的倍数减去 ndigits 的幂;如果两个倍数同样接近,则从 0 开始舍入。”保留值将保留到更接近前一个数字的一​​端(向上舍入),或者如果与两端的距离相同,则保留到距离 0 最远的一侧。所以round(0.5) 将近似于1,而round(-0.5) 将近似于-1。

但是在python3.5的文档中,文档变成了“将值四舍五入到最接近的10次幂减去ndigits的倍数;如果两个倍数同样接近,则朝偶数选择进行四舍五入。” , 将保留到偶数边。例如,round(0.5) 和 round(-0.5) 将保留为 0,而 round(1.5) 将保留为 2。

所以如果有项目是从py2迁移到py3的,要注意round的地方(当然要注意/和/,还有print,还有一些替代库)。

2、特殊数字round出来的结果可能未必是想要的。

>>> round(2.675, 2)
2.67

python2和python3的doc中都举了个相同的栗子,原文是这么说的:

Note

The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 
2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a 
float. See Floating Point Arithmetic: Issues and Limitations for more information.

简单来说就是round(2.675, 2)的结果,不管是从python2还是3看,结果应该是2.68,结果却是2.67,为什么呢?这与浮点数的精度有关。我们知道浮点数在机器中可能无法准确表达,因为转换成1和0的字符串后,可能是数字,机器做了截断处理。那么机器中保存的数字2.675比实际数字要小一点。这使它更接近 2.67,因此四舍五入到小数点后两位近似于 2.67。

以上。除非你对准确性没有要求,否则请避免使用 round() 函数。近似计算我们还有其他选择:

使用math模块中的一些函数,比如math.ceiling(天花板除法)。

python自带整除,python2中是/,3中是//,还有div函数。

字符串格式化可以用于截断,比如“%.2f”%值(保留两位小数,转成字符串...如果要使用浮点数,请披上float()的外衣) .

当然,如果浮点数精度要求很高,请使用嘚semo,不,请使用decimal模块。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享