>>> from decimal import Decimal, ROUND_HALF_UP, setcontext, Context
>>> ctx = Context(prec=2, rounding=ROUND_HALF_UP)
>>> setcontext(ctx)
>>> total = Decimal('0.002') + Decimal('0.002')
>>> total
Decimal('0.004')
它實際上並不像我所預期的那樣自動四捨五入,所以我不能將它用於整個計算塊。
另一個問題是,臨時值會被舍入,導致精度下降。
from decimal import Decimal, ROUND_HALF_UP, getcontext, setcontext, Context
class FinanceContext:
def __enter__(self):
self.old_ctx = getcontext()
ctx = Context(prec=2, rounding=ROUND_HALF_UP)
setcontext(ctx)
return ctx
def __exit__(self, type, value, traceback):
setcontext(self.old_ctx)
class Cart(object):
@property
def calculation(self):
with FinanceContext():
interim_value = Decimal('1')/Decimal('3')
print interim_value, "prints 0.33, lost precision due to new context"
# complex calculation using interim_value
final_result = ...
return final_result
您應該添加此作爲您的問題的一部分,因爲它不是一個真正的答案。 –
我修改了這個答案,它回答了我的一個問題。 –
嗨@JamesLin你能向我解釋ROUND_HALF_UP標誌嗎? – aldesabido