Python 与float和without一起使用时的round()行为

Python 与float和without一起使用时的round()行为,python,Python,我对Python非常陌生。我正在学习一些基本的东西,但在这一点上我有点磕磕绊绊 在下面的示例中,为什么十进制中的5不舍入到下一个更高的十进制数字 >>> round(2.67576,4) 2.6758 >>> round(2.67575,4) 2.6757 我原以为这两个表达式的答案是一样的,但它们不是简单的答案是float很奇怪 这与其说是Python的问题,不如说是任何使用二进制浮点表示数量的系统的问题。浮点数的性质是不精确的,这使得在需要精度而不需要精

我对Python非常陌生。我正在学习一些基本的东西,但在这一点上我有点磕磕绊绊

在下面的示例中,为什么十进制中的5不舍入到下一个更高的十进制数字

>>> round(2.67576,4)
2.6758
>>> round(2.67575,4)
2.6757

我原以为这两个表达式的答案是一样的,但它们不是

简单的答案是float很奇怪

这与其说是Python的问题,不如说是任何使用二进制浮点表示数量的系统的问题。浮点数的性质是不精确的,这使得在需要精度而不需要精确性的情况下跟踪连续值是可以的。浮点数不适用于您在这里尝试执行的那种精确算法

我建议您使用Python的标准“decimal”模块进行精确的数值计算


简单地说:2.67575实际上比计算机中的稍小,所以它向下旋转而不是偶数,当它正好在中间时,它是圆的。