有没有办法在Python中获得高精度Decimal的ceil?
>>> import decimal;
>>> decimal.Decimal(800000000000000000001)/100000000000000000000
Decimal('8.00000000000000000001')
>>> math.ceil(decimal.Decimal(800000000000000000001)/100000000000000000000)
8.0
数学对值进行四舍五入并返回非精确值
取Decimal实例上限的最直接方法x
是使用x.to_integral_exact(rounding=ROUND_CEILING)
。这里没有必要搞乱上下文。请注意,这设置了Inexact
and 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
and to_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
首先,可能会在此过程中丢失信息,因此最终可能会得到不正确的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)