a`を13.95に丸めるようにしてほしい。
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
round`]1関数は思ったように動作しません。
浮動小数点数の古い問題に遭遇していますが、すべての数字を正確に表現できるわけではありません。コマンドラインでは、メモリから完全な浮動小数点形式を表示しているだけです。
浮動小数点表現では、丸められたバージョンも同じ数字です。コンピュータは2進法なので、浮動小数点数を整数として格納し、それを2の累乗で割るので、13.95は125650429603636838/(2**53)と同じように表現されます。
倍精度の数字は53ビット(16桁)の精度を持ち、通常の浮動小数点は24ビット(8桁)の精度を持ちます。Pythonの浮動小数点型は倍精度を使う](http://docs.python.org/tutorial/floatingpoint.html)で値を格納します。
例えば、以下のようになります。
>>> 125650429603636838/(2**53)
13.949999999999999
>>> 234042163/(2**24)
13.949999988079071
>>> a=13.946
>>> print(a)
13.946
>>> print("%.2f" % a)
13.95
>>> round(a,2)
13.949999999999999
>>> print("%.2f" % round(a,2))
13.95
>>> print("{0:.2f}".format(a))
13.95
>>> print("{0:.2f}".format(round(a,2)))
13.95
>>> print("{0:.15f}".format(round(a,2)))
13.949999999999999
小数点以下の桁数を2つだけにしたい場合(例えば、通貨の値を表示したい場合)には、いくつかの良い選択肢があります。
1.1. 整数を使用し、ドルではなくセントで値を格納し、100 で割ってドルに変換する。 2.2. decimalのような固定小数点数を使用する。
出力フォーマットを変更することができます。
>>> a = 13.95
>>> a
13.949999999999999
>>> print "%.2f" % a
13.95