【发布时间】:2013-12-18 06:34:47
【问题描述】:
我正在尝试将 0.2 值添加到常量 x where x = 8 中,循环运行到 100。以下是代码
x = 8
>>> for i in range(100):
... x += 0.2
...
>>> x
但每次我得到不同的答案和计算总是不正确的。我读到了Floating Point Arithmetic Issue and Limitations,但应该有办法解决这个问题。我可以使用doubles(如果存在)吗?我正在使用 Python 2.7
更新:
import time
x=1386919679
while(1):
x+=0.02
print "xx %0.9f"%x
b= round (x,2)
print "bb %0.9f"%b
time.sleep(1)
输出
xx 1386933518.586801529
bb 1386933518.589999914
xx 1386933518.606801510
bb 1386933518.609999895
xx 1386933518.626801491
bb 1386933518.630000114
所需的输出
我想要正确的输出,我知道如果只写print x 它将是准确的。但是我的应用程序要求我应该以 9 精度打印结果。我是新手,所以请善待。
【问题讨论】:
-
您能告诉我您希望
sum做什么吗?另外,我想知道您是否真的对浮点精度或代码有问题?你能举一个具体的例子说明你期望的结果以及你得到的各种不同的、不正确的结果吗? -
这个问题和其中的代码不清楚预期的结果。你在期待什么?提供的代码将“正确”计算 8 + 0.2 * 100,这不是故意的吗?
-
@kobejohn 对不起,我刚才复制错了。我只是想看看添加了什么。
-
@AhmedDurrani 如果您想要一个好的答案,请准确提供您的期望和您得到的。
-
“以 9 精度打印结果”是指九位有效数字,还是小数点后九位?使用 double 的良好做法可实现九位有效数字。小数点后九位前十位共需要19位有效数字,这需要不同的数据类型。