【问题标题】:Python Float Lost with Big NumbersPython Float 因大数字而丢失
【发布时间】:2014-12-10 08:32:22
【问题描述】:

我正在处理一些大数字,但遇到了丢失浮点值的问题。

当乘以大数时,浮点部分似乎丢失了,丢失了,变为零。 使用具有较小数字的相同代码时,不会发生这种情况。

简单的例子:

import math
f_ProNum(31 * 61) ## Correct: DEBUG float: 314.833333
f_ProNum(5915587277 * 3367900313) ## Incorrect: DEBUG float: 3320518040297852928.000000

def f_ProNum(v_Num):
    """Syntax: (int); Returns: (float)"""
    print("DEBUG float: %f") %((v_Num - 2.0)/6.0) # DEBUG
    v_PDNum = (v_Num - 2.0)/6.0
    return v_PDNum

从第二次调用中可以看出,float 似乎丢失了,或者设置为零。

为什么要这样做,如何解决和修复?

【问题讨论】:

  • 你期望输出什么?
  • 一些数字,浮点数,小数点右侧,如第一次调用中返回的较小数字所示。在第二次调用中,丢失的浮点数是“.83333333”。
  • 你试过使用十进制模块吗,相关stackoverflow.com/questions/2663612/…
  • @Padraic Cunningham,Eri​​k Haugen 回答了这个问题。我试过了,它奏效了。我选择了他的答案。感谢您的反馈。干杯。

标签: python


【解决方案1】:

较大的浮点值会丢失精度。为了简化一点,浮点数使用固定数量的“数字”,称为尾数或有效数字,因此足够大的数字基本上将使用小数点左侧部分的所有数字。 更多内容见:https://en.wikipedia.org/wiki/Floating_point#Internal_representation

要解决您的问题,您可以尝试使用decimal 模块,它允许您配置所需的精度:https://docs.python.org/2/library/decimal.html

【讨论】:

  • 成功了。非常感谢。我一直在研究这个直到昨晚凌晨,但没有任何乐趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
相关资源
最近更新 更多