是否有更好的(更快,更高效,或者#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。
答案 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