13.95a
に丸めたいのですが、round
ですが、次のようになります:
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
標準ライブラリのDecimalクラスに関する同様の問題については、以下を参照してください。常に小数点 2 桁を表示するように小数をフォーマットするにはどうすればよいですか?。
ベストアンサー1
あなたは古い問題浮動小数点数では、すべての数値を正確に表現できるわけではありません。コマンド ラインは、メモリから完全な浮動小数点数形式を表示するだけです。
浮動小数点表現では、丸められたバージョンは同じ数値になります。コンピューターはバイナリなので、浮動小数点数を整数として保存し、それを 2 の累乗で割ります。したがって、13.95 は 125650429603636838/(2**53) と同様の方法で表されます。
倍精度数は53ビット(16桁)の精度を持ち、通常の浮動小数点は24ビット(8桁)の精度を持ちます。Pythonの浮動小数点型は倍精度を使用する値を保存します。
例えば、
>>> 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("{:.2f}".format(a))
13.95
>>> print("{:.2f}".format(round(a, 2)))
13.95
>>> print("{:.15f}".format(round(a, 2)))
13.949999999999999
小数点以下 2 桁のみが必要な場合 (たとえば、通貨の値を表示する場合)、より良い選択肢がいくつかあります。
- 整数を使用し、値をドルではなくセントで保存し、100 で割ってドルに変換します。
- または、固定小数点数を使うと、小数点。