ホームページ >バックエンド開発 >Python チュートリアル >Python で浮動小数点数の小数点以下 2 桁を確実に保持するにはどうすればよいですか?

Python で浮動小数点数の小数点以下 2 桁を確実に保持するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-25 19:25:13835ブラウズ

How Can I Reliably Preserve Two Decimal Places in Floating-Point Numbers in Python?

浮動小数点数で 2 つの小数点を保持する

浮動小数点数を扱う場合、浮動小数点数を特定の小数点以下に制限することが望ましいことがよくあります。小数点の数。ただし、単にround()関数を使用するだけでは、次のような動作で見られるように、予期しない結果が生じる可能性があります:

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999

これは、浮動小数点数ではすべての数値を正確に表現することに限界があるために発生します。メモリに保存されている値は、表示されている値と常に同じであるとは限りません。

浮動小数点の精度について

Python で使用される倍精度浮動小数点数の精度は、およそ16桁の精度。これは、13.95 のような数値が次のような方法で表現されることを意味します。

125650429603636838/(2**53)

round() 関数を適用すると、結果は依然として同じ浮動小数点値であり、内部的には同じ制限で表現されます。

>>> 125650429603636838/(2**53)
13.949999999999999

10 進数を制限するための代替方法ポイント

小数点以下 2 桁のみを表示することが重要な場合は、次の代替案を検討してください。

  • 整数とスケーリングの使用: 値をドルではなくセントで表現します。 100で割って変換します。
  • を使用します固定小数点 10 進数: 10 進数などのモジュールを利用して、指定された精度で固定小数点数を保存および演算します。

例:

>>> a = 13.946
>>> print("%.2f" % a)
13.95
>>> print("{:.2f}".format(a))
13.95

# Using decimal module
>>> import decimal
>>> a = decimal.Decimal('13.946')
>>> a.quantize(decimal.Decimal('.01'))
Decimal('13.95')

以上がPython で浮動小数点数の小数点以下 2 桁を確実に保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。