经过对Python的decimal module documentation进行了非常全面的阅读后,我仍然发现自己对分数小数时会发生什么感到困惑。将小数点除以2.5得出无效结果2.7到2.7
在Python 2.4.6(有意义):
>>> import decimal
>>> decimal.Decimal(1000)/10
Decimal("100")
在Python 2.5.6,2.6.7的Python和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的最小值)?
即使它不是一个错误,_someone_可能已经在一些点,在过去5年http://bugs.python.org开了大约一个bug报告,我想看看有 – agf
好点。我在那里搜索;我所有搜索功能看起来是远程相关的http://bugs.python.org/issue7046和http://bugs.python.org/issue1031480,这两者都不是这样的... –
在Ubuntu上适用于我11.04与Python 2.6.6和2.7.1+。它可能是一个macports问题? – user500198