在 py2 中,临界度约为 0.50,而在 py3 中为 0.51
在Python2中,
round(0.5) => 1.0
round(0.49) => 0.0
round(0.51) => 1.0
round(1.5) => 2.0
round(0.4999999999999999999999999) => 1.0
round(0.4899999999999999999999999) => 0.0
round(0.4989999999999999999999999) => 0.0
在Python 3中,
round(0.49) => 0
round(0.50) => 0
round(0.51) => 1
round(0.500000000000000000001) => 0
round(0.50999999999999999999999) => 1
最佳答案
从 round(0.5)==1
更改为 round(0.5)==0
是有意为之。
比较 Python 2 中各轮之间的文档和 Python 3. 。它已更改为始终向偶数舍入,而不是从零舍入(如果两个值同样接近)。
如果您总是希望四舍五入,请改为使用:
import math
print math.ceil(0.5)
无论 python 版本如何,这都会给出 1.0。
Here is an article解释 float 的奇怪之处以及为什么会出现舍入误差。 2.x 和 3.x 之间舍入误差的差异是因为两个版本中舍入工作方式的变化所致。
由于浮点值的工作原理,不可能准确地表示许多十进制数。如果您需要确切的数字,则需要使用 decimal数据类型代替。
编辑:此更改是为了符合 IEEE 754 standard ,又名 IEEE 浮点标准。这样舍入后的值就不会偏向高值,而是偏向偶数。
关于python - python中round()函数舍入变化的确切临界值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31587317/