Pythonでの丸め処理:round()関数の使い方と「四捨五入ではない」という注意点

数値を扱うプログラムでは、小数点以下を特定の位置で丸めたり、大きな数値を概算(例:12345円 → 12000円)したりする処理が必要になります。

Pythonには組み込み関数の round() が用意されていますが、実はこの関数、私たちが学校で習う一般的な「四捨五入」とは少し異なる挙動をします。

この記事では、round() 関数の基本的な使い方(桁数指定)と、Python特有の「偶数丸め」という仕様について解説します。

目次

round() 関数の基本的な使い方

round() 関数は、第1引数に「丸めたい数値」、第2引数に「丸める桁数(省略可)」を指定します。

構文:

result = round(数値, 桁数)

1. 小数点以下の桁数を指定する(正の引数)

第2引数に 正の整数 を指定すると、小数点以下のその桁数まで残るように丸められます。 省略した場合は、最も近い整数に丸められます。

# テスト用の数値
value = 9876.54321

print(f"元の値: {value}")

# 1. 引数なし(整数に丸める)
print(f"round(value): {round(value)}")

# 2. 小数点第1位まで(第2位を丸める)
print(f"round(value, 1): {round(value, 1)}")

# 3. 小数点第3位まで(第4位を丸める)
print(f"round(value, 3): {round(value, 3)}")

実行結果:

元の値: 9876.54321
round(value): 9877
round(value, 1): 9876.5
round(value, 3): 9876.543

2. 整数の桁数を指定する(負の引数)

第2引数に 負の整数 を指定すると、整数の位(1の位、10の位など)で丸めることができます。 大きな数値を「およそ」の値にしたい場合に便利です。

  • -1: 10の位まで丸める(1の位を処理)
  • -2: 100の位まで丸める(10の位を処理)
  • -3: 1000の位まで丸める(100の位を処理)
# テスト用の整数
large_value = 123456

print(f"元の値: {large_value}")

# 1. 10の位まで(1の位を丸める)
print(f"round(large_value, -1): {round(large_value, -1)}")

# 2. 100の位まで
print(f"round(large_value, -2): {round(large_value, -2)}")

# 3. 1000の位まで
print(f"round(large_value, -3): {round(large_value, -3)}")

実行結果:

元の値: 123456
round(large_value, -1): 123460
round(large_value, -2): 123500
round(large_value, -3): 123000

注意点:Pythonのroundは「四捨五入」ではない

ここが最も重要です。Python 3の round() 関数は、**「偶数への丸め(銀行家の丸め)」**という方式を採用しています。

これは、端数がちょうど 0.5 の場合、**「結果が偶数になる方」**へ丸めるというルールです。

一般的な四捨五入との違い

  • 四捨五入:0.5 は常に切り上げる(遠い方へ)。
    • 1.52
    • 2.53
  • 偶数丸め (Python):0.5 の時、結果が偶数になる方へ。
    • 1.52 (2は偶数なので切り上げ)
    • 2.52 (2は偶数なので切り捨て
# 0.5 の境界値での挙動を確認
val_a = 1.5
val_b = 2.5
val_c = 3.5
val_d = 4.5

print(f"round({val_a}) -> {round(val_a)}")
print(f"round({val_b}) -> {round(val_b)}") # ここに注目
print(f"round({val_c}) -> {round(val_c)}")
print(f"round({val_d}) -> {round(val_d)}") # ここに注目

実行結果:

round(1.5) -> 2
round(2.5) -> 2
round(3.5) -> 4
round(4.5) -> 4

2.53 ではなく 2 になっていることがわかります。 この方式は、大量のデータを処理した際に、四捨五入ばかりだと合計値が大きくなりすぎるバイアス(偏り)を防ぐために、統計学や金融工学でよく使われる手法です。

もし、厳密な「四捨五入」を行いたい場合は、標準ライブラリの decimal モジュールを使用する必要があります。

まとめ

  • round(x, n): 数値 xn 桁で丸めます。
  • n が正: 小数点以下の桁数指定。
  • n が負: 整数の桁数指定(10の位、100の位など)。
  • 偶数丸め: 端数が 0.5 の場合、偶数に近い方に丸められます(2.5 → 2)。通常の四捨五入とは異なるため注意が必要です。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次