Деление десятичных дробей дает неверные результаты в Python 2.5–2.7

После очень тщательного чтения документации по десятичному модулю Python я все еще озадачен тем, что происходит, когда я делю десятичный.

В Python 2.4.6 (имеет смысл):

>>> import decimal
>>> decimal.Decimal(1000) / 10
Decimal("100")

В Python 2.5.6, Python 2.6.7 и Python 2.7.2 (вызывает недоумение):

>>> import decimal
>>> decimal.Decimal(1000) / 10
Decimal('0.00000-6930898827444486144')

Еще больше сбивает с толку, этот результат даже не появляется чтобы быть действительным:

>>> decimal.Decimal('0.00000-6930898827444486144')
Traceback (most recent call last):
  File "", line 1, in 
  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'

Результат тот же, что и при использовании decimal.Decimal (1000) / decimal.Decimal (10) , поэтому использование int в качестве делителя не является проблемой.

Часть проблемы явно связана с точностью:

>>> decimal.Decimal("1000.000") / decimal.Decimal("10.000")
Decimal('0.00000-6930898827444486144')
>>> decimal.Decimal("1000.000") / decimal.Decimal("10")
Decimal('0.000200376420520689664')

Но должна быть достаточная точность в decimal.Decimal ("1000.000") , чтобы безопасно разделить на 10 и получить ответ, по крайней мере, правильный.

Тот факт, что это поведение не изменилось в трех основных версиях Python, говорит мне, что это не ошибка.

Что я делаю не так? Что мне не хватает?

Как я могу разделить десятичную дробь (кроме Python 2.4)?

12
задан Josh Bleecher Snyder 23 November 2011 в 20:04
поделиться