Pythonで数値を正確に丸める!round()とDecimalを徹底解説
Pythonで数値を扱う際、四捨五入は頻繁に行う操作の一つです。しかし、組み込みのround()関数には少し注意が必要な点があります。この記事では、Pythonで小数や整数を正確に四捨五入する方法を、それぞれの関数の特徴と具体的なコード例を交えて詳しく解説します。
🔢 round()関数で四捨五入する
Pythonの**round()関数**は、数値を丸めるための最も基本的な組み込み関数です。小数点を指定して丸めることができます。
round()の基本的な使い方
round()関数は、引数を一つだけ指定すると最も近い整数に丸め、第二引数に小数点以下の桁数を指定するとその桁数で丸めます。
# round()の基本的な使い方
print(round(3.14)) # 3
print(round(3.78)) # 4
print(round(3.14159, 2)) # 3.14
round()の注意点:偶数丸め(JIS丸め)
round()関数は、ちょうど中間(例: X.5)の値を丸める際に**偶数丸め(JIS丸め、銀行家の丸め)**というルールを採用します。これは、丸めたい桁の次の数字が5の場合、結果が偶数になるように丸めるというものです。
# round()の偶数丸めの例
print(round(2.5)) # 2 (2は偶数)
print(round(3.5)) # 4 (4は偶数)
print(round(4.5)) # 4 (4は偶数)
この動作は、一般的な「5を切り上げ」という感覚と異なる場合があるので、注意が必要です。特に金融計算など厳密な四捨五入が必要な場合は、次に説明するdecimalモジュールを使用することを推奨します。
💡 Decimalモジュールで厳密に四捨五入する
decimalモジュールは、浮動小数点数の精度問題を回避し、正確な十進数を扱いたい場合に利用します。このモジュールを使えば、一般的な「5を切り上げ」の四捨五入も簡単に実現できます。
Decimalオブジェクトの作成
Decimalオブジェクトは、文字列または数値から作成できます。浮動小数点数の誤差を避けるため、文字列で初期化するのが安全です。
from decimal import Decimal
# Decimalオブジェクトの作成
num_decimal = Decimal('3.14159')
print(num_decimal) # 3.14159
Decimal.quantize()による厳密な四捨五入
Decimalオブジェクトの**quantize()メソッドは、指定した精度で数値を丸めることができます。rounding引数にROUND_HALF_UP**を指定することで、「5を切り上げ」の厳密な四捨五入が可能です。
from decimal import Decimal, ROUND_HALF_UP
# Decimal.quantize()を使った厳密な四捨五入
# 小数点以下2桁で四捨五入
num = Decimal('3.145')
rounded_num = num.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(rounded_num) # 3.15
# 小数点以下0桁(整数)で四捨五入
num_int = Decimal('2.5')
rounded_int = num_int.quantize(Decimal('1'), rounding=ROUND_HALF_UP)
print(rounded_int) # 3
quantize()メソッドの第一引数にDecimal('0.01')を指定すると小数点以下第2位まで、Decimal('1')を指定すると整数に丸める、といったように桁数を指定できます。
まとめ
Pythonで数値を四捨五入する際には、手軽な**round()関数と、より厳密な処理が可能なdecimalモジュール**のDecimal.quantize()メソッドを使い分けましょう。特に正確な計算が求められる場面ではDecimalモジュールが非常に強力です。
これらの知識を活用して、Pythonでの数値計算をより正確かつ効率的に行ってください。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座


