2016-06-29 34 views
2

半分、小数で、すなわち0.5、正確なバイナリ表現を有している:私はそれを整数に丸めた場合0.10.5(小数)の丸めが正確でないのはなぜですか?

それにもかかわらず、私は同じように動作れ、PythonとCで試行0の代わりに1を得ます。例えば。 Pythonコード:

>>> a,b,c = 0.49, 0.5, 0.51 
>>> [round(x) for x in (a,b,c)] 
[0, 0, 1] 
>>> "%.0f %.0f %.0f" % (a,b,c) 
'0 0 1' 

興味深いことに、

>>> a,b,c = 0.049, 0.05, 0.051 
>>> [round(x,1) for x in (a,b,c)] 
[0.0, 0.1, 0.1] 
>>> "%.1f %.1f %.1f" % (a,b,c) 
'0.0 0.1 0.1' 

私は、例えば、多くの同様の質問を認識していPython rounding error with float numbersPython tutorial on floating point arithmetics、および義務的なWhat Every Computer Scientist Should Know About Floating-Point Arithmeticである。

数値に(10進数)0.5などの正確なバイナリ表現がある場合は、正しく丸めてはいけませんか?

編集:問題は、バージョン3.4.3で発生したが、バージョン2.7.6

+0

は、私はそれらの結果を得ることはありません - 私は0、1、1.使用しているのPythonのバージョンは何、そしてどのようなプラットフォーム上を参照してください? –

+1

「0.5」は正確なバイナリ表現「0.05」を持っていませんが、 –

+4

質問には既に回答済みです:http://stackoverflow.com/questions/10825926/python-3-x-rounding-behavior – HelloWorld

答えて

8

に私はv2.7.3の下で、彼らは3

だから、pythonでラウンドする方法を変更して知らない:

それはあなたを助けている場合、私は知らないが、私は答えとして、それを掲示しています

In [32]: round(2.5) 
Out[32]: 2 

In [33]: round(3.5) 
Out[33]: 4 

:v3.2.3下

In [85]: round(2.5) 
Out[85]: 3.0 

In [86]: round(3.5) 
Out[86]: 4.0 

私の低い評判のためコメントできないからです。

質問は、より適切にここで答えている:Python 3.x rounding behavior

+0

申し訳ありませんが、これは質問に答えません –

+2

良い答え。詳細については、http://stackoverflow.com/questions/10825926/python-3-x-rounding-behaviorを参照してください。 – mtrw

関連する問題