ga('set', 'anonymizeIp', 1);
在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)