round()函数的简介:
round()函数用于一些不需精确数据的取四舍五入值的操作。
语法:
round( a [, b] )
其中a是需要操作的数据,b是取值后需要保留的小数位数。b为空则默认是取整,注意b也可以是负数。
例如
round( 2.45, 1)
》 2.5
返回值
返回浮点数a的四舍五入值(保留小数点位数则由b决定)
实例
#python2
print( round( 0.5))
#python3
print( round( 0.5))
输出结果分别是1.0 0
是不是很奇怪,为什么python2中0.5的四舍五入值是1.0,而python3中0.5的四舍五入值为0。
原因:
这是因为该函数对于返回的浮点数并不是按照四舍五入的规则来计算,而会收到计算机表示精度的影响。并且也会收python版本的影响。
如果我们阅读一下python的文档,里面是这么写的:
在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。
所以如果有项目是从py2迁移到py3的,可要注意一下round的地方(当然,还要注意/和//,还有print,还有一些比较另类的库)。
注意!!!⚠️
这还不是全部,多做一些输出我们可以发现,其实python2或者python3都不是完全是我们理解的这样的四舍五入,不管是2还是3。
print(round( 2.45, 1))
print(round( 2.65, 1))
print(round( 2.75, 1))
print(round( 2.85, 1))
print(round( 3.05, 1))
其输出的值分别为2.5 2.6 2.8 3.0
这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。所以通过round()函数来四舍五入是不可取的。再需要做这些操作的时候使用python的decimal库就可以完美解决这些问题。