После очень тщательного ознакомления с документацией по описанию десятичного модуля 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 "<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'
Результат тот же, что и при использовании 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)?