python - python中round()函数舍入变化的确切临界值是多少?

标签 python python-2.7 python-3.x

在 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/

相关文章:

python - Tornado 网址不匹配? ("Interrogation") 标志

python - 给定一个坐标列表,计算每对点之间距离的最有效方法是什么?

python - Zapier 给出错误 : `' unicode' object has no attribute 'copy' ` for Python script

python - 按每个元素的第一个字符拆分列表

python - 如何使用 for 循环在提供的字符串中交替大小写

python - Tkinter - 切换到不同页面时如何重置网格行配置

python - 为什么在训练 Keras 模型时将损失乘以标量会得到不同的结果?

python - 在matplotlib中修改viridis colormap(替换部分颜色)

python - 在 python 2.7 中打开空格(?)分隔的文本文件?

python - python 将具有相同键值对的多个字典合并为一个字典