這是在現有的答案提出的觀點的更詳細的解釋。
如果您需要精確的十進制算術,您確實需要擺脫數字文字,如0.1
。數字文字通常由IEEE 754 64位二進制浮點數表示。
與0.1最接近的這種數字是0.1000000000000000055511151231257827021181583404541015625。它的平方是0.01000000000000000111022302462515657123851077828659396139564708135883709660962637144621112383902072906494140625,這與0.01最接近,0.010000000000000020816681711721685132943093776702880859375不一樣。
你可以得到什麼回事通過移除prec =2
情況下,允許更多精確的輸出更清晰的視野:
from decimal import *
q = Decimal(0.01)
x = Decimal(0.10) * Decimal(0.10)
y = Decimal(x) - Decimal(q)
print(q)
print(x)
print(y)
輸出:
0.01000000000000000020816681711721685132943093776702880859375
0.01000000000000000111022302463
9.020562075127831486705690622E-19
如果你曾經使用字符串常量,如由其他響應建議,轉換爲Decimal將直接完成,而不需要經過二進制浮點。 0.1和0.01都可以在Decimal中精確表示,所以不會有舍入誤差。
嘿,謝謝,很高興知道Decimal喜歡的字符串,我根據你的回答編輯了一些問題,儘管 – SomeGuy30145