2025-01-14 09:00
為什麼在數據庫中使用 Decimal 處理貨幣?
在新手設計數據庫時,多數會用 float 等的普通數字類型來處理貨幣資料,但當中存在一個潛在的計算問題。
眾所週知,電腦是用二進制來儲存數據,包括文字。而貨幣一般是有限精度的數字,所以有某些情境下不能完整地用二進制表達。我們可以用 Python 做一個實驗,運行 print(0.1 + 0.2),結果不會是 0.3而是一個非常接近0.3數字 ,這顯示了程式在計算中有誤差,如果多次運算後誤差可能會擴大。
要解決這個問題,我們要使用 Decimal 類型來處理貨幣數據。Decimal 是專門為十進制數字設計的數據類型,能夠精確表示和計算小數,避免浮點數的精度問題。例如:
from decimal import Decimal
print(Decimal('0.1') + Decimal('0.2')) # 輸出 0.3
所以,使用 Decimal 處理貨幣是更安全、更準確的選擇。事實上,我們應該在數據庫中認真考慮不同的數據類型,貨幣只是其中一個例子。