Python Float丢失了大数字

时间:2014-12-09 23:32:03

标签: python

我正在处理一些大数字,并且遇到浮动值丢失的问题。

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

琐碎的例子:

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

如第二次调用所示,浮动似乎丢失,或设置为零。

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

1 个答案:

答案 0 :(得分:4)

较大的浮点值会丢失精度。为简化一点,浮点数具有固定数量的“数字”,称为尾数或有效数,因此足够大的数字基本上将使用小数点左边部分的所有数字。 有关详情,请参阅:https://en.wikipedia.org/wiki/Floating_point#Internal_representation

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