Dopo una lettura approfondita di Python decimal module documentation, mi trovo ancora perplesso per ciò che accade quando divido un decimale.La divisione dei decimali produce risultati non validi in Python 2.5 - 2.7
In Python 2.4.6 (senso):
>>> import decimal
>>> decimal.Decimal(1000)/10
Decimal("100")
In Python 2.5.6, Python 2.6.7, 2.7.2 e Python (sconcertante):
>>> import decimal
>>> decimal.Decimal(1000)/10
Decimal('0.00000-6930898827444486144')
più confusa tuttavia, questo risultato non ha nemmeno sembra essere valido:
>>> decimal.Decimal('0.00000-6930898827444486144')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.py", line 548, in __new__
"Invalid literal for Decimal: %r" % value)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/decimal.py", line 3844, in _raise_error
raise error(explanation)
decimal.InvalidOperation: Invalid literal for Decimal: '0.00000-6930898827444486144'
il risultato è lo stesso utilizzando decimal.Decimal(1000)/decimal.Decimal(10)
, quindi non è un problema con l'utilizzo di un int come il divisore.
Parte del problema è chiaramente in giro per la precisione:
>>> decimal.Decimal("1000.000")/decimal.Decimal("10.000")
Decimal('0.00000-6930898827444486144')
>>> decimal.Decimal("1000.000")/decimal.Decimal("10")
Decimal('0.000200376420520689664')
Ma ci dovrebbe essere ampio precisione decimal.Decimal("1000.000")
per dividere in modo sicuro 10 e ottenere una risposta che è, almeno nel campo da baseball a destra.
Il fatto che questo comportamento sia invariato attraverso tre revisioni principali di Python mi dice che non è un bug.
Cosa sto sbagliando? Cosa mi manca?
Come dividere un decimale (a parte usando Python 2.4)?
Anche se non è un bug, _someone_ ha probabilmente aperto un bug report su di esso ad un certo punto negli ultimi 5 anni sul http://bugs.python.org, vorrei dare un'occhiata lì – agf
Buon punto . Ho cercato lì; sono state trovate tutte le mie ricerche che sembravano lontanamente correlate erano http://bugs.python.org/issue7046 e http://bugs.python.org/issue1031480, nessuno dei quali è questo ... –
Funziona bene per me su Ubuntu 11.04 con Python 2.6.6 e 2.7.1+. Potrebbe essere un problema con Macports? – user500198