【发布时间】:2023-01-12 12:11:56
【问题描述】:
我正在使用 python 的 decimal 模块来做一些涉及小数的工作。我有以下代码:
from decimal import *
getcontext().prec = 2 # use two decimal places
counter = Decimal(0)
while counter != Decimal(1000.01):
print(counter)
counter += Decimal(0.01)
这应该以 0.01 的增量打印从 0 到 1000.00 的每个数字,但出于某种原因,
数字 0.01 到 0.09 有三位小数(即 0.010 而不是 0.01),在 counter 达到 1.0 后(由于某种原因有一位小数),它完全停止增加并保持在 1.0。输出看起来像这样:
0
0.010
0.020
0.030
0.040
0.050
0.060
0.070
0.080
0.090
0.10
0.11
0.12
...
0.97
0.98
0.99
1.0
1.0
1.0
(repeats 1.0 forever)
我在这里做错了什么?
【问题讨论】:
-
您应该将字符串传递给
Decimal,否则您将失去好处。Decimal通常用于避免由floats 引起的舍入错误。如果您传入float,则在您开始之前已经发生舍入错误。 -
@Axe319 将我传递的所有值转换为 Decimal 在达到 1.0 后仍然会导致相同的错误。尽管它确实解决了小数点后三位的问题。
-
getcontext().prec = 2并没有按照您的想法行事。精度适用于全部数字,甚至是剩下的小数点。因此,一旦计数器达到 1.0,您就“用完了”所有精度数字。 1.01 将是三位数的精度。