将十进制舍入到python中的可配置小数位

时间:2014-10-06 18:00:37

标签: python-2.7 decimal rounding

是否有更好的(更快,更高效,或者#34;更多的pythonic")方式比我在Python中舍入Decimals的方式更好?我想出了以下内容:

sign, digits, exponent = the_number.as_tuple()
Decimal((sign, digits[:exponent+len(digits)+decimal_places],-decimal_places))

编辑: 我最终使用了另一个更快的解决方案[1]并且#34;填充"小数到想要的精度:

decimal.Decimal('%.*f' % (decimal_places, number))

[1]最多可达~200个小数位。在我的情况下,我得到一个随机浮动值,我想"演员"到十进制,所以原始精度已经受限并且<< 200。

2 个答案:

答案 0 :(得分:1)

round(内置):

>>> the_number = decimal.Decimal(1.23456789)
>>> round(the_number, 2)
Decimal('1.23')
>>> d=decimal.Decimal("31.100")
>>> d
Decimal('31.100')
>>> round(d, 10)
Decimal('31.1000000000')
>>> round(d, 20)
Decimal('31.10000000000000000000')
>>> round(d, 24)
Decimal('31.100000000000000000000000')
>>> round(d, 26)
Decimal('31.10000000000000000000000000')
>>> round(d, 1)
Decimal('31.1')
>>> round(d, 0)
Decimal('31')

答案 1 :(得分:1)

可以尝试:

with decimal.localcontext() as ctx:
    ctx.prec = aWantedPRECISION          # temporarily adapt precision to aWantedPRECISION
    result   = +the_number               # set

如果这是 Pythonic-enough