ga('set', 'anonymizeIp', 1);
Categories: CodingPython

[python] 精確小數計算

Share

在python或是javascript中常常會有小數溢位或是不夠精確的問題存在。

本文介紹在python中執行精確的小數計算方法。

問題

python在執行浮點運算時沒辦法精確表達所有的十進制小數位。

原因

會有浮點運算誤差的原因就是底層CPU在運算時,他的浮點運算單元(floating point unit – FPU)是利用IEEE-754標準來執行所以會有這種運算”特性“。因此使用float時就無法避免會產生這樣的誤差。

更多關於IEEE-754標準請參考:https://link.medium.com/BcdyiMCLmZ

解決方法

我們可以使用decimal module來避免該問題發生(會犧牲效能)。

from decimal import Decimal
a = Decimal("4.1")
b = Decimal("5.329")
print(a+b)

這邊Decimal的參數必須是string,不能是float,否則還是會產生誤差。

decimal module也能控制尾數或是四捨五入。

from decimal import Decimal
from decimal import localcontext
a = Decimal("4.1")
b = Decimal("5.329")
print(a/b)
with localcontext() as ctx:
    ctx.prec = 3
    print(a/b)

Jys

Published by
Jys

Recent Posts

[python] Flask Create RESTful API

This article gi... Read More

3 年 前發表

[Javascript] 新增/刪除JSON中key值

在web訊息交換常會需要對JS... Read More

3 年 前發表

[JAVA] SQL Server Connection

本文介紹JAVA連線SQL s... Read More

3 年 前發表