如何在Python 3中创建具有大指数的Decimal?

时间:2016-06-08 12:52:40

标签: python python-3.x

Python 3似乎对Python 2没有的Decimal大小有一些任意限制。以下代码适用于Python 2:

Decimal('1e+100000000000000000000')

但是在Python 3上我得到了:

decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]

提高精度无济于事。为什么会这样?我有什么可以做的吗?

1 个答案:

答案 0 :(得分:4)

看来Decimal实际

>>> d = Decimal('10') ** Decimal('100000000000000000000')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
decimal.Overflow: [<class 'decimal.Overflow'>]

事实上,我从来没有听说任意长数是Decimal的重点 - 正确的舍入和任意精度的小数。如果你想要一个任意长的数字,那就是多长时间,而在Python3中你只需要它。

>>> d = 10 ** 100000000000000000000

(虽然这需要很长时间才能计算出来。我认为我的Mac书籍相信核心i5 仍然在几分钟后仍未完成。哎呀,即使是字符串1 ,然后是所有那些零,真的真的大。)

对于进一步的踢腿和咧嘴笑,我发现你可以configure the overflow value, apparently,虽然你仍然无法获得如此惊人的大数字:

>>> from decimal import getcontext
>>> getcontext().Emax = 100000000000000000000
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C ssize_t