Python 科学计算精度需要注意的问

发布时间:2019-10-11 09:02:11编辑:auto阅读(1921)

    对于金融方面的计算和分析,往往会忽略科学计算方面精度控制的问题。
    该问题针对于 Python2 & Python3

    这里我们来看一个问题:

    
        num=0.0
        
        for i in range(10):
            num+=0.1
        print(num)
    In [14]: num
    Out[14]: 0.9999999999999999
    

    这个问题可以参考 floatintpint

    比如:

    >>>.1 + .1 + .1 == .3
    >>>False

    如果我们利用round进行数据处理,有时候会得到意外的结果。

        >>> round(23.505,2)
        23.5

    而结果是23.5不是23.51,当处理数据精度的时候往往会忽略精度方面的度量。

    利用decimal库解决问题:

    from decimal import Decimal
    
    # Here are all your options for rounding:
    # ROUND_05UP       ROUND_DOWN       ROUND_HALF_DOWN  ROUND_HALF_UP
    # ROUND_CEILING    ROUND_FLOOR      ROUND_HALF_EVEN  ROUND_UP
    
    Decimal("12.505").quantize(Decimal("0.00"),ROUND_HALF_UP)
    output: Decimal('12.51')

    利用python decimal更好的控制精度,而不是用round.

关键字