round
このページでは豊富な例を用いてPythonのroundの使い方を学ぶことができます。
組み込み関数roundは小数の丸め処理を行います。
第1引数で与えた数値を第2引数で与えた精度へと丸めた数値を戻り値(返り値)として返します。
第2引数が省略またはNone
の場合は整数へ、それ以外は第1引数で与えた値と同じ型を返します。
注意事項として、同じ近さであれば整数への丸め処理は偶数になること、浮動小数点数に対する処理が挙げられます。
TL;DR
基本
# 第2引数を与えない場合は第1引数に最も近い整数
rounded_number1 = round(3.14)
print(rounded_number1)
==> 3
# 第2引数を与えていないので整数(int)が戻り値となる
print(type(rounded_number1))
==> <class 'int'>
# 近さが同じなら偶数への丸め処理が実行される
print(round(2.5))
==> 2
print(round(-2.5))
==> -2
# 近さが同じでない場合は偶数への丸め処理は実行されない
print(round(-4.5))
==> -4
print(round(-4.501))
==> -5
# 整数の場合
print(round(100))
==> 100
関連情報:type(組み込み関数)の使用方法
小数部の桁数(精度)の指定
# 第2引数で精度を指定できる
rounded_number1 = round(3.14, 1)
print(rounded_number1)
==> 3.1
# 第2引数を与えたので戻り値は第1引数と同じ型
print(type(rounded_number1))
==> <class 'float'>
print(round(3.14, 0))
==> 3.0
print(round(1.41421356237, 5))
==> 1.41421
# 近さが異なる場合はより近い方に丸められる
print(round(2.5551, 2))
==> 2.56
print(round(2.5549, 2))
==> 2.55
浮動小数点数に対する処理の注意
# 小数部の丸めで近さが同じ場合1
print(round(5.535, 2))
==> 5.54
print(round(-5.535, 2))
==> -5.54
# 小数部の丸めで近さが同じ場合2
# 以下の例は5.55や-5.55には丸められない(四捨五入ではない)
# 小数は浮動小数点数で正確に表すことができないのでこの様な問題が発生する
print(round(5.545, 2))
==> 5.54
print(round(-5.545, 2))
==> -5.54
# 近さが同じでない場合は意図した挙動になる(近い方に丸められる)
print(round(5.546, 2))
==> 5.55
print(round(5.5451, 2))
==> 5.55
print(round(-5.5451, 2))
==> -5.55
関連1次情報:浮動小数点演算、その問題と制限 - Python ドキュメント
解説
基本
組み込み関数のroundは引数1つで使用した場合、与えた数値に最も近い整数を戻り値(返り値)として返します。
この挙動は第2引数にNone
を与えた場合も同じです。
round関数の整数への丸め処理は偶数よりになることに注意してください。
以下の例で、9.5は9と10どちらに対しても同じ近さですが、偶数である10が戻り値となります。
rounded_number1 = round(1.23456)
print(rounded_number1)
==> 1
# 第2引数を与えていないので整数(int)が戻り値となる
print(type(rounded_number1))
==> <class 'int'>
print(round(9.5))
==> 10
print(round(-9.5))
==> -10
print(round(9.49999999))
==> 9
関連情報:type(組み込み関数)の使用方法
小数部の桁数(精度)の指定
第2引数に整数を指定することで、小数点以下を何桁に丸めるのかを指定することができます。
丸め桁数を指定した場合、戻り値は第1引数に与えた型と同じになります。
この丸め処理は、次項で説明するように四捨五入ではないことに気をつけてください。
rounded_number1 = round(5.65, 1)
print(rounded_number1)
==> 5.7
# 第2引数を与えたので戻り値は第1引数と同じ型
print(type(rounded_number1))
==> <class 'float'>
print(round(1.73205080757, 3))
==> 1.732
print(round(2.2360679775, 0))
==> 2.0
浮動小数点数に対する処理の注意
前述した第2引数で浮動小数点数の丸める桁数を指定する場合、 roundの挙動は意図した挙動と異なる場合がありますので注意してください。
丸め処理の結果は四捨五入ではなく、それぞれの数値によって異なります。
これは、
コンピュータ(計算機)で多くの小数を2進数の分数で表現することができない
ことが原因です。
この問題を詳しく知りたい場合、上記のリンクを参照してください。
# 2.1 or -2.1に丸められる
print(round(2.105, 2))
==> 2.1
print(round(-2.105, 2))
==> -2.1
# 2.68 or -2.68にはならない
print(round(2.675, 2))
==> 2.67
print(round(-2.675, 2))
==> -2.67