decimal 為處理數字精準度的模組 (module) ,有兩種主要的型態 (type) ,如下表
型態 | 說明 |
---|---|
Decimal | 處理數字的類別,內含多種計算用的方法。 |
Context | 設定處理環境的類別,包括設定精準度到小數點後第幾位等。 |
Decimal 類別除了可以直接用於算數計算外,另有以下的常用方法
方法 | 說明 |
---|---|
.sqrt() | 回傳平方根。 |
.exp() | 回傳歐拉數的次方。 |
.ln() | 回傳歐拉數為底的對數值。 |
.log10() | 回傳 10 為底的對數值。 |
Decimal 物件處理數字不會自動四捨五入,例如以下程式
from decimal import *
a = 0.006
b = 0.8
print(a * b)
a = Decimal(0.006)
b = Decimal(0.8)
print(a * b)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:ddemo01.py
# 功能:示範 decmial 模組
# 作者:張凱慶
於命令列執行以上程式
$ python3 ddemo01.py |
0.0048000000000000004 |
0.004800000000000000366373598126 |
$ |
0.006 乘以 0.8 的正確結果為 0.0048 ,電腦計算會產生誤差,內建型態 float 會自動四捨五入,而 Decimal 物件不會自動四捨五入。
因此可用 Context 物件設定精準度,通常會用以下的函數 (function) 取得 Context 物件
函數 | 說明 |
---|---|
getcontext() | 取得 Context 物件。 |
Context 物件的屬性 .prec 可設定精確度到小數點後第幾位, .rounding 設定四捨五入的方式,舉例如下
from decimal import *
a = Decimal(11)
b = Decimal(2.3)
print(a / b)
getcontext().prec = 10
print(a / b)
#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:ddemo02.py
# 功能:示範 decmial 模組
# 作者:張凱慶
於命令列執行以上程式
$ python3 ddemo02.py |
4.782608695652174282418246378 |
4.782608696 |
$ |
這一行將精確度設定為 10
getcontext().prec = 10
小數點後第 10 位做四捨五入,因此顯示到小數點後第 9 位。
相關教學影片