用(N)%1つのリターンはInvalidOperation、DivisionImpossible IはDjangoアプリケーションの小数点オブジェクトを使用して、この奇妙なエラーを発見しています:decimal.Decimal全ての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'>]
さらに不思議、このdoesnのを数字が非常に大きくなるまで「Tはipythonで起こる:10進数(380)%1は私のDjangoのアプリを壊したので、私はこれを発見しました:エラーがipdbに限定されていないことを
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'>]
注意を。
このエラーを説明する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:[] 'を返します。 –