数値を扱うプログラムでは、小数点以下を特定の位置で丸めたり、大きな数値を概算(例: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.5→22.5→3
- 偶数丸め (Python):
0.5の時、結果が偶数になる方へ。1.5→2(2は偶数なので切り上げ)2.5→2(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.5 が 3 ではなく 2 になっていることがわかります。 この方式は、大量のデータを処理した際に、四捨五入ばかりだと合計値が大きくなりすぎるバイアス(偏り)を防ぐために、統計学や金融工学でよく使われる手法です。
もし、厳密な「四捨五入」を行いたい場合は、標準ライブラリの decimal モジュールを使用する必要があります。
まとめ
round(x, n): 数値xをn桁で丸めます。nが正: 小数点以下の桁数指定。nが負: 整数の桁数指定(10の位、100の位など)。- 偶数丸め: 端数が
0.5の場合、偶数に近い方に丸められます(2.5 → 2)。通常の四捨五入とは異なるため注意が必要です。
