Python 速查手冊

12.3 數字精準度 decimal

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)

#《程式語言教學誌》的範例程式
# https://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)

#《程式語言教學誌》的範例程式
# https://kaiching.org/
# 檔名:ddemo02.py
# 功能:示範 decmial 模組
# 作者:張凱慶

於命令列執行以上程式

$ python3 ddemo02.py
4.782608695652174282418246378
4.782608696
$

這一行將精確度設定為 10

getcontext().prec = 10

小數點後第 10 位做四捨五入,因此顯示到小數點後第 9 位。

上一頁: 12.2 時間日期處理 datatime
Python 速查手冊 - 目錄
下一頁: 12.4 隨機數 random
回 Python 教材首頁