我对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
。