2016-12-20 19 views
5

私はそれのように私に出力を与えるpython2.7コンソールで次のコマンドを実行している場合:私はpython3.5.2なぜPython3のprint関数は10進数を丸めますか?

>>> 1.2 - 1.0 
0.19999999999999996 

>>> print(1.2 - 1.0) 
0.19999999999999996 

で同じ操作を実行していますが

>>> 1.2 - 1.0 
0.19999999999999996 

>>> print 1.2 - 1.0 
0.2 

私はなぜpython2.7.12に知りたいです私には0.2を与えるが、Python3.5.2の印刷機能では私に0.19999999999999996を与えるprintステートメント。

+2

内部的には同じ番号ですが、表示ロジックを変更しました。私は以前これが尋ねられていると確信していますが、良いデュープのターゲットを見つけることはできません。 – user2357112

+0

それはおそらく[この問題](https://bugs.python.org/issue1580) – mgilson

+0

はいt @mgilsonあなたが正しいことに関連しているようです:) –

答えて

3

printの変更に起因するものではなく、暗黙のうちに呼び出したfloats__str__機能の変更が含まれます。したがって、あなたは、それはのような呼び出し、印刷になりますとき:チェック、

詳細については
>>> print (1.2 - 1.0).__repr__() 
0.19999999999999996 

:それはあるとして浮動値を表示するために

# For Python 2.7 
>>> print (1.2 - 1.0).__str__() 
0.2 

を、明示的として.__repr__を呼び出すことができますMartjin's answer on Floating point behavior in Python 2.6 vs 2.7状態:

Python 2.7では、実際の値ではなく表現が変更されました。浮動小数点値はまだ実数のバイナリ近似であり、バイナリの分数は必ずしも正確な数を表すわけではありません。

0

print Python2.7ラウンドの浮動小数点数です。実際には、数字1.2と0.2は、メモリ内に正確に表現することはできません(バイナリコードの無限小数)。したがって、正しく出力するために、プログラミング言語のいくつかの出力関数がラウンドを使用することがあります。 Python2.7のprintはラウンドを使用しますが、Python3.xではprintは使用しません。

+0

この回答はすべてです問題を再現してください。 – TigerhawkT3

+1

あなたの答えは正解であり、人々が上向きにされている人物と同じ答えを与えることを投票していることは恥です。 –

関連する問題