Python 科學計算精度須要注意的問題

對於金融方面的計算和分析,每每會忽略科學計算方面精度控制的問題。
該問題針對於 Python2 & Python3html

這裏咱們來看一個問題:python

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

這個問題能夠參考 floatintpintcode

好比:htm

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

若是咱們利用round進行數據處理,有時候會獲得意外的結果。ci

>>> round(23.505,2)
    23.5

而結果是23.5不是23.51,當處理數據精度的時候每每會忽略精度方面的度量。get

利用decimal庫解決問題:io

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.class

相關文章
相關標籤/搜索