在对Python的decimal module documentation进行了非常详尽的阅读之后,我仍然发现自己对除以小数点后的情况感到困惑。
在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)?
最佳答案
从MacPorts错误中,您已经安装了Xcode 4,并且Python 2.7.2的版本是使用clang C编译器而不是gcc-4.2构建的。 2.7.2之后,在OS X上至少有one known problem with building with clang已在Python中修复。释放。要么应用补丁,要么更好地确保构建使用gcc-4.2。像(未经测试!)之类的东西:
sudo bash
export CC=/usr/bin/gcc-4.2
port clean python27
port upgrade --force python27
如果MacPorts不覆盖它,则构建之前的版本可能会起作用。
更新:所需的补丁现已应用于Python 2的MacPorts端口文件。请参阅https://trac.macports.org/changeset/87442