Python 3似乎对Python 2没有的Decimal大小有一些任意限制。以下代码适用于Python 2:
Decimal('1e+100000000000000000000')
但是在Python 3上我得到了:
decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
提高精度无济于事。为什么会这样?我有什么可以做的吗?
答案 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