如何在Python中正确添加浮点数?

时间:2013-12-18 06:34:47

标签: python-2.7 floating-point

我试图在运行到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精度打印结果。我是新手,所以请善待。

1 个答案:

答案 0 :(得分:0)

你可以使用双精度浮点数。你已经默认使用它了。

至于解决方法: x += 0.2 * 100

我知道这听起来很容易,但浮点不精确的解决方案不是设置FLOATING_POINT_IMPRECISION = False。这是表示的基本限制,并且没有一般解决方案,只有特定的解决方案(以及适用于特定情况组的模式)。

还有一个可以存储0.2的有理数字类型,但对于大多数现实世界的用例来说,它不值得考虑。