浮動小数点数を小数点2桁までに制限する 質問する

浮動小数点数を小数点2桁までに制限する 質問する

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 桁のみが必要な場合 (たとえば、通貨の値を表示する場合)、より良い選択肢がいくつかあります。

  1. 整数を使用し、値をドルではなくセントで保存し、100 で割ってドルに変換します。
  2. または、固定小数点数を使うと、小数点

おすすめ記事