Python中的舍入是如何工作的



我对Python中的舍入工作方式有点困惑
有人能解释一下Python为什么会这样吗?

示例:

>>> round(0.05,1) # this makes sense
0.1
>>> round(0.15,1) # this doesn't make sense! Why is the result not 0.2?
0.1

同样适用于:

>>> round(0.25,1) # this makes sense
0.3
>>> round(0.35,1) # in my opinion, should be 0.4 but evaluates to 0.3
0.3

编辑:因此,一般来说,Python有可能向下取整而不是向上取整。那么,我能理解唯一可能发生的"异常"事情是Python向下取整吗?或者,由于它的存储方式,它可能也会"异常"地被四舍五入?(我还没有发现Python在我期望它向下取整时向上取整的情况)

这实际上是经过设计的。来自Python的文档:

round()对于浮点数的行为可能令人惊讶:例如,round(2.675, 2)给出的是2.67,而不是预期的2.68这不是一个错误:这是因为大多数小数不能准确地表示为浮点。

听起来你需要decimal模块:

from decimal import *
x = Decimal('0.15')
print x.quantize(Decimal('0.1'), rounding=ROUND_HALF_UP)

输出:

0.2

举个例子,这里有一个取整的例子:

>>> round(0.0499999999999999999,1)
0.1

在这种情况下,17"9"是导致这种行为的最小数字。这是因为0.0499999999999999999的内部表示是0.05000000000000000277555756156289135105907917022705078125

相关内容

  • 没有找到相关文章

最新更新