我正在使用一个Django应用程序十进制的目的,并发现此奇怪的错误:甚至更神秘decimal.Decimal(n)的%1返回InvalidOperation,DivisionImpossible对于所有n> = 100
ipdb> decimal.Decimal(10) % 1
Decimal('0')
ipdb> decimal.Decimal(100) % 1
*** decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
ipdb> decimal.Decimal(150) % 1
*** decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
ipdb> decimal.Decimal(79) % 1
Decimal('0')
ipdb> decimal.Decimal(100.1) % 2
Decimal('0.10')
ipdb> decimal.Decimal(1000) % 2
*** decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
,这并未“T发生在IPython中,直到数字变得非常大:
In [23]: decimal.Decimal(10**27) % 1
Out[23]: Decimal('0')
In [24]: decimal.Decimal(10**28) % 1
---------------------------------------------------------------------------
InvalidOperation Traceback (most recent call last)
<ipython-input-24-6ceaef82d283> in <module>()
----> 1 decimal.Decimal(10**28) % 1
InvalidOperation: [<class 'decimal.DivisionImpossible'>]
注意,错误并不局限于IPDB:我发现了这一点,因为十进制(380)%1打破我的Django应用程序。
的documentation描述这个错误说:
Division impossible
This occurs and signals invalid-operation if the integer result of a divide-integer or remainder operation had too many digits (would be longer than precision). The result is [0,qNaN].
任何想法?
我无法用python 3重现你的错误,没有问题的作品 – Anonymous
我无法在Python 2中重现 – dawg
我可以重新编写他在Python3.5中的最后一个错误。 'Decimal(10 ** 28)%1'会抛出一个decimal.InvalidOperation:[]' –