【问题标题】:How to correctly add floating numbers in Python?如何在 Python 中正确添加浮点数?
【发布时间】: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位有效数字,这需要不同的数据类型。

标签: python-2.7 floating-point


【解决方案1】:

当然,您可以使用双精度浮点数。默认情况下你已经在使用它了。

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

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

还有一个有理数类型可以精确存储0.2,但对于大多数实际用例来说不值得考虑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多