获取 Decimal 实例上限的最直接方法x
是使用x.to_integral_exact(rounding=ROUND_CEILING)
. 这里没有必要搞乱上下文。请注意,这会在适当的情况下设置Inexact
和Rounded
标志;如果您不想触摸标志,请x.to_integral_value(rounding=ROUND_CEILING)
改用。例子:
>>> from decimal import Decimal, ROUND_CEILING
>>> x = Decimal('-123.456')
>>> x.to_integral_exact(rounding=ROUND_CEILING)
Decimal('-123')
与大多数 Decimal 方法不同,to_integral_exact
andto_integral_value
方法不受当前上下文精度的影响,因此您不必担心更改精度:
>>> from decimal import getcontext
>>> getcontext().prec = 2
>>> x.to_integral_exact(rounding=ROUND_CEILING)
Decimal('-123')
顺便说一句,在 Python 3.x 中,math.ceil
它完全按照您的意愿工作,只是它返回的是一个int
而不是一个Decimal
实例。之所以可行,是因为math.ceil
Python 3 中的自定义类型可重载。在 Python 2 中,math.ceil
只需将Decimal
实例转换为float
第一个实例,在此过程中可能会丢失信息,因此您最终可能会得到不正确的结果。