gpt4 book ai didi

上下文中的python十进制量化与prec

转载 作者:太空狗 更新时间:2023-10-30 01:38:03 26 4
gpt4 key购买 nike

考虑以下十进制舍入方法:

使用量化:

>>> (Decimal('1')/Decimal('3')).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
Decimal('0.33')

使用上下文:

>>> ctx = Context(prec=2, rounding=ROUND_HALF_UP)
>>> setcontext(ctx)
>>> Decimal('1')/Decimal('3')
Decimal('0.33')

这两种舍入方法之间是否存在任何实际差异?有什么问题吗?使用上下文是否更优雅一些,以便我可以对整个计算 block 使用 with 语句?

最佳答案

>>> 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')

它实际上并没有像我预期的那样自动舍入,所以我不能将它用于整个计算 block 。

另一个问题,临时值会四舍五入,这会失去精度。

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

关于上下文中的python十进制量化与prec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com