Pythonのdecimal module documentationをよく読んだあと、小数点を分割すると何が起こるのか疑問に思う。 Pythonの2.4.6において小数点を分割すると、Python 2.5から2.7に無効な結果が返される
(理にかなっている):Pythonの2.5.6、Pythonの2.6.7において
>>> import decimal
>>> decimal.Decimal(1000)/10
Decimal("100")
、と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')
しかし10により安全に分割し、少なくとも右の球場での答えを得るためにdecimal.Decimal("1000.000")
に十分精度があるはずです。
この動作がPythonの3つの主要なリビジョンによって変更されていないという事実は、バグではないと私に言います。
私は間違っていますか?私は何が欠けていますか?
10進数(Python 2.4を使用していない)を分割するにはどうすればよいですか?
場合でも、_someone_はおそらくhttp://bugs.python.orgの最後の5年間にいくつかの時点でそれについてのバグレポートを開いている、私はそこ – agf
良い点を見てみましょう。私はそこを捜した。すべての私の検索フーは遠隔に関連して見えているhttp://bugs.python.org/issue7046とhttp://bugs.python.org/issue1031480でしたが、どちらもこれはどちらですか... –
私のためのうまく動作するUbuntu 11.04(Python 2.6.6および2.7.1+)それはmacportsの問題だろうか? – user500198