Python で数値を四捨五入する方法 (round() 関数と Decimal)

Python で浮動小数点数を丸める方法を学びます。 Banker の丸め、カスタムの小数精度、および表示用の浮動小数点の書式設定について理解します。

エディターでこのソリューションを試してください

概要

コンピュータの浮動小数点演算は、バイナリ システムによる小数の格納方法が原因で、予期しない精度の問題を引き起こすことがあります (たとえば、「0.1 + 0.2」が「0.30000000000000004」と評価される)。ユーザーに数値を表示するとき、またはメトリクスを準備するときは、数値を四捨五入することが一般的な要件です。 Python には、これを実現するためのいくつかの方法が用意されています。

主なツールは、組み込みの `round(number, ndigits)` 関数です。数値とオプションの精度カウントを受け取ります。 `ndigitals` を省略すると、最も近い整数に丸められます。 `ndigitals` を指定すると、その小数点以下の桁数に丸められます。

Python の `round()` 関数の重要な特性は、「バンカーの丸め」(半分を偶数に丸める) を使用することです。数値が 2 つの整数のちょうど中間である場合 (例: `2.5` または `3.5`)、Python は最も近い *偶数* の数値に丸めます。これは、「round(2.5)」が「2」、「round(3.5)」が「4」であることを意味します。上方バイアスを防ぐために大規模なデータセットに対して数学的に公平である一方で、正確な財務計算を行うには、「10 進数」モジュールの量子化ツールを使用する必要があります。

コードと実行の出力

このスクリプトは、組み込みのround関数、Bankerの丸めの例、および10進数モジュールを使用した浮動小数点数の丸めを示します。

from decimal import Decimal, ROUND_HALF_UP

val = 3.14159

# 1. Round to nearest integer
print("Nearest Integer:", round(val))

# 2. Round to 2 decimal places
print("Two decimals:", round(val, 2))

# 3. Banker's Rounding demonstration (rounds to nearest even)
print("round(2.5):", round(2.5)) # Nearest even is 2
print("round(3.5):", round(3.5)) # Nearest even is 4

# 4. Math rounding up (Traditional rounding) using decimal module
amount = Decimal("2.5")
rounded_up = amount.quantize(Decimal("1"), rounding=ROUND_HALF_UP)
print("Decimal ROUND_HALF_UP (2.5):", rounded_up)
端子出力
Nearest Integer: 3
Two decimals: 3.14
round(2.5): 2
round(3.5): 4
Decimal ROUND_HALF_UP (2.5): 3

段階的な実装

  • 組み込みのround(number)関数を呼び出して、floatを最も近い整数に丸めます。
  • 2 番目の引数 (例:round(num, 2)) を渡して、保持する小数点以下の桁数を指定します。
  • 財務上の厳密な四捨五入計算には、ROUND_HALF_UP を備えた 10 進数モジュールを使用します。

よくある質問

Python でround(2.5) が 3 ではなく 2 を返すのはなぜですか?

Python は、半数値を最も近い偶数の整数に丸めるバンカーの丸めを使用します。これにより、統計的な偏りが軽減されます (半分の数値を切り上げると、大きなデータセットでは常にわずかな上方ドリフトが生じます)。

数値を常に切り上げる、または常に切り下げるにはどうすればよいですか?

math モジュールをインポートし、math.ceil(x) を使用して次の整数に切り上げるか、math.floor(x) を使用して前の整数に切り捨てます。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。