1.2 decimal模塊
1 >>> 0.1 + 0.1 +0.1 == 0.3 2 False 3 >>> 4 >>> print(0.1 + 0.1 + 0.1) 5 0.30000000000000004
what???
0.1 + 0.1 +0.1 == 0.3 判斷為假
0.1 + 0.1 + 0.1 == 0.30000000000000004可見Python中的浮點數的存儲是不精確的。為毛捏? 因為內置的二進制浮點數實現 float是不精確的,這是二進制的問題。 不過直觀地看上去,二進制浮點數與實際數值的差距很小。但金融應用、科學計算等需要精確十進制表達的場合就不行了,為了確保十進制數位精度,或者用戶希望計算結果與手算相符的場合。Decimal 重現了手工的數學運算。 高精度使 Decimal 可以執行二進制浮點數無法進行的模運算和等值測試。 下面正式進入decimal模塊的學習了。 第一步:國際慣例,想使用,先導入
from decimal import Decimal
>>> from decimal import Decimal
>>> Decimal(‘7.1‘) / Decimal(‘3.1‘)
Decimal(‘2.290322580645161290322580645‘)
這個demo中有3個知識點:
(1)Decimal()的參數是字符串,如果不註意這一點,把浮點數作為參數傳遞進來,得到的結果還是不精確的
>>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1)
Decimal(‘0.3000000000000000166533453694‘)
>>>
>>> Decimal(1.2) + Decimal(1.8)
Decimal(‘3.000000000000000000000000000‘)
>>> Decimal(‘1.2‘) + Decimal(‘1.8‘)
Decimal(‘3.0‘)
>>>
(2)計算結果返回的還是Decimal類型 ,可以用float()函數將其轉換為浮點數
>>> a = Decimal(‘7.1‘) / Decimal(‘3.1‘)
>>> float(a)
2.2903225806451615
Decimal類型能通過int()轉換為整型嗎?
>>> b = Decimal(‘1.0‘) + Decimal(‘1.0‘)
>>> int(b)
2
>>>
>>> c = Decimal(‘1.0‘) + Decimal(‘1.1‘)
>>> int(c)
2 #哦,這樣啊,轉換成整數的時候是只取整數部分的,不試一下還真不知道
(3)浮點型計算中經常會遇到的一個問題,兩數相除,但不能相除的情況
>>> Decimal(‘2‘) / Decimal(‘3‘)
Decimal(‘0.6666666666666666666666666667‘) #小數點後面這麽多位啊,可是要那麽多位沒什麽用啊,腫麽辦?
可以事先自定義一下Decimal計算的精度
>>> Decimal(‘1.0‘) / Decimal(‘3.0‘)
Decimal(‘0.3333333333333333333333333333‘)
>>>
>>> from decimal import getcontext
>>> getcontext().prec = 4
>>> Decimal(‘1.0‘) / Decimal(‘3.0‘)
Decimal(‘0.3333‘)
>>>
1.2 decimal模塊