После очень тщательного чтения документации по десятичному модулю 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)?