使用.quantize()进行十进制舍入不使用原始上下文

use*_*450 2 python decimal rounding python-2.7

如果我执行以下操作,我希望0.005舍入到0.01而不是向下0.00舍入,因为舍入设置为ROUND_HALF_UP.

>>> import decimal
>>> currency = decimal.Context(rounding=decimal.ROUND_HALF_UP)
>>> cents = decimal.Decimal('0.00')
>>> amount = currency.create_decimal('0.005')
>>> amount
Decimal('0.005')
>>> amount.quantize(cents)
Decimal('0.00')
Run Code Online (Sandbox Code Playgroud)

但是,如果我将货币传递给quantize()它,它会正确地舍入:

>>> amount.quantize(cents, context=currency)
Decimal('0.01')
Run Code Online (Sandbox Code Playgroud)

为什么金额(从货币上下文创建)不使用货币上下文?

注意:这个问题不是要求如何舍入到2位小数.我只是以此为例.我想知道为什么Decimal从a 创建的数据在量化/舍入时Context不会使用相同的内容Context.

use*_*ica 6

十进制对象不保留它们的创建上下文.使用特定上下文的十进制操作(例如Context.create_decimalDecimal.quantize使用上下文参数)仅覆盖该一个操作的全局上下文; 对结果Decimal的进一步操作是使用全局上下文完成的.

如果要使用所有操作ROUND_HALF_UP,可以设置全局上下文:

decimal.setcontext(currency)
Run Code Online (Sandbox Code Playgroud)

但是如果要混合上下文,则必须为需要除全局上下文之外的上下文的每个操作显式提供上下文.

  • 这正是原因所在.为什么选择downvote? (2认同)