概要(round は「数値を指定桁で丸める」ための基本関数)
round は、数値を最も近い値へ丸める組み込み関数です。小数点以下の桁数を指定でき、桁数を省略すると整数へ丸めます。重要なのは「Python の round は 0.5 の中間値を“偶数へ丸める(銀行丸め)”」という仕様と、浮動小数点の誤差により期待と違う結果になることがある点です。必要に応じて Decimal や math の関数と使い分けましょう。
print(round(3.6)) # 4(整数へ)
print(round(3.14159, 2)) # 3.14(小数点以下2桁)
print(round(12345, -2)) # 12300(百の位で丸め)
Python基本の使い方(ここが重要)
引数の意味と戻り値(number, ndigits)
- number: 丸めたい数値(int, float など)
- ndigits: 小数点以下の桁数。省略時は最も近い整数に丸める。負の数を渡すと「整数部分の桁」で丸められる(-1 なら十の位、-2 なら百の位)。
print(round(3.14)) # 3(整数へ)
print(round(3.14159, 3)) # 3.142(小数点以下3桁)
print(round(9876, -1)) # 9880(十の位)
print(round(9876, -3)) # 10000(千の位)
Python中間値 0.5 は「偶数へ丸め」になる(銀行丸め)
Python の round は、中間値(例: 2.5, 3.5, 0.5)を最も近い偶数へ丸めます。誤差を平均化するための仕様で、金融・統計で使われることがあります。
print(round(2.5)) # 2(偶数へ)
print(round(3.5)) # 4(偶数へ)
print(round(1.5)) # 2(偶数へ)
Python浮動小数点の誤差に注意
2 進数で表現しづらい小数(0.1, 0.2 など)は内部的にわずかな誤差を持つため、丸め結果が期待と異なる場合があります。表示用途なら文字列フォーマット(f文字列や format)も検討しましょう。
x = 2.675
print(round(x, 2)) # 期待は 2.68 だが 2.67 になりうる
print(f"{x:.2f}") # '2.68'(表示はフォーマットで安定)
Python実務の使い分け(切り上げ・切り捨て・高精度丸め)
切り上げ・切り捨ては math.ceil / math.floor
round は「四捨五入」系。切り上げ・切り捨てが必要なら math を使います。負の数の挙動にも一貫性があります。
import math
print(math.ceil(3.2)) # 4(切り上げ)
print(math.floor(3.8)) # 3(切り捨て)
print(math.floor(-1.2)) # -2(負の数の切り捨ても一貫)
Python金額や厳密な小数は Decimal が安全
金融計算など「丸め規則を厳密に指定したい」「誤差を許容できない」場合は Decimal を使い、丸め方式(ROUND_HALF_UP など)を明示します。
from decimal import Decimal, ROUND_HALF_UP, getcontext
getcontext().prec = 28
price = Decimal("2.675")
print(price.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)) # 2.68(一般的な四捨五入)
Python表示だけ丸めたいなら文字列フォーマット
内部値はそのままに、人に見せるときだけ桁を揃えたいなら f文字列や format を使うと誤差に強く、見た目が安定します。
value = 123.456789
print(f"{value:.3f}") # '123.457'
print(format(value, ".2f")) # '123.46'
Pythonよくある落とし穴の深掘り(中間値・負の桁・型)
0.5 が「必ず切り上げ」ではない
- 結論: Python の round は 0.5 を「偶数へ丸め」ます。
- 対策: 一般的な「0.5 を常に切り上げ」挙動にしたいなら Decimal + ROUND_HALF_UP。
負の ndigits は「整数の桁」で丸める
- 例: ndigits = -1 → 十の位、-2 → 百の位、-3 → 千の位。
- 注意: 中間値(…5…)では銀行丸めが働くため結果が想定と異なる場合あり。
print(round(15, -1)) # 20(十の位で偶数へ)
print(round(25, -1)) # 20
print(round(35, -1)) # 40
Pythonround の戻り型
- ndigits を省略: int(整数)になることが多い。
- ndigits を指定: float が返る(元が Decimal なら Decimal を使うべき)。
例題で身につける(定番から一歩先まで)
例題1:表示用に小数第2位まで丸めて整形
scores = [3.14159, 2.675, 2.5]
for s in scores:
shown = f"{s:.2f}" # 表示安定
stored = round(s, 2) # 内部は round でも可
print(shown, stored)
Python例題2:十の位・百の位でレポート数値を丸める
values = [123, 125, 135, 175]
rounded_10 = [round(v, -1) for v in values] # 十の位
rounded_100 = [round(v, -2) for v in values] # 百の位
print(rounded_10)
print(rounded_100)
Python例題3:一般的な四捨五入(0.5 は切り上げ)で金額を丸める
from decimal import Decimal, ROUND_HALF_UP
def yen_round(x: str, ndigits: int = 0) -> Decimal:
q = Decimal("1").scaleb(-ndigits) # ndigits=2 → 0.01
return Decimal(x).quantize(q, rounding=ROUND_HALF_UP)
print(yen_round("2.675", 2)) # 2.68
print(yen_round("123.5", 0)) # 124
Python例題4:四捨五入して合計を出す(表示はフォーマット)
nums = [1.234, 2.345, 3.456]
rounded = [round(n, 2) for n in nums]
total = sum(rounded)
print(f"values={', '.join(f'{n:.2f}' for n in nums)} total={total:.2f}")
Pythonまとめ
round は「最も近い値に丸める」ための基本関数で、桁指定(正・負)に対応し、実務で頻出します。中間値 0.5 は“偶数へ丸め”になる点と、浮動小数点の誤差に注意。切り上げ・切り捨ては math、厳密な四捨五入(0.5 は常に上へ)は Decimal を使う。表示だけ丸めるなら f文字列や format が安定。これらを使い分ければ、初心者でも丸め処理を短く、正確に、目的に合った形で書けます。
