Pythonで数値を正確に丸める!round()とDecimalを徹底解説


 


Pythonで数値を扱う際、四捨五入は頻繁に行う操作の一つです。しかし、組み込みのround()関数には少し注意が必要な点があります。この記事では、Pythonで小数や整数を正確に四捨五入する方法を、それぞれの関数の特徴と具体的なコード例を交えて詳しく解説します。


 

🔢 round()関数で四捨五入する

 

Pythonの**round()関数**は、数値を丸めるための最も基本的な組み込み関数です。小数点を指定して丸めることができます。

 

round()の基本的な使い方

 

round()関数は、引数を一つだけ指定すると最も近い整数に丸め、第二引数に小数点以下の桁数を指定するとその桁数で丸めます。

Python
 
# 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の場合、結果が偶数になるように丸めるというものです。

Python
 
# 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オブジェクトは、文字列または数値から作成できます。浮動小数点数の誤差を避けるため、文字列で初期化するのが安全です。

Python
 
from decimal import Decimal

# Decimalオブジェクトの作成
num_decimal = Decimal('3.14159')
print(num_decimal) # 3.14159

 

Decimal.quantize()による厳密な四捨五入

 

Decimalオブジェクトの**quantize()メソッドは、指定した精度で数値を丸めることができます。rounding引数にROUND_HALF_UP**を指定することで、「5を切り上げ」の厳密な四捨五入が可能です。

Python
 
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爆速講座