我试图在运行到100的循环中将0.2
值添加到常量x where x = 8
。以下是代码
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精度打印结果。我是新手,所以请善待。
答案 0 :(得分:0)
你可以使用双精度浮点数。你已经默认使用它了。
至于解决方法:
x += 0.2 * 100
我知道这听起来很容易,但浮点不精确的解决方案不是设置FLOATING_POINT_IMPRECISION = False
。这是表示的基本限制,并且没有一般解决方案,只有特定的解决方案(以及适用于特定情况组的模式)。
还有一个可以存储0.2
的有理数字类型,但对于大多数现实世界的用例来说,它不值得考虑。