我正在使用一個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:[]' –