【Python】round関数

round関数は、ほぼ四捨五入してくれる関数。
※基本的に四捨五入だが、五捨になる場合あり。

>>> round(3.5)
4
>>> round(3.4)
3

round(小数(float型))で、四捨五入して、整数(int型)が返ってくる。

 

>>> round(3.14159, 1)
3.1
>>> round(3.14159, 2)
3.14
>>> round(3.14159, 3)
3.142
>>> round(3.14159, 4)
3.1416

第2引数で小数点以下の桁数を指定可能。
round(3.14159, 1)では、小数点以下2桁目の「4」を四捨五入して、小数点以下1桁になる結果「3.1」を返してくれる。
(第2引数が「1」。10**-(1)(10の-1乗)=0.1。よって、小数点以下1桁)


>>> round(5678.5678, -2)
5700.0
>>> round(5678.5678, -1)
5680.0
>>> round(5678.5678, 0)
5679.0

第2引数が「-2」の場合、10**-(-2)=10**2=100。よって、10の位を四捨五入して、100の位以上が残る。
第2引数が「-1」の場合、10**-(-1)=10**1=10。よって、1の位を四捨五入して、10の位以上が残る。
第2引数が「0」の場合、10**-(0)=10**0=1。よって、0.1の位を四捨五入して、1の位以上が残る。

 

>>> round(3.5)
4
>>> round(2.500000000001)
3
>>> round(2.5)
2
>>> round(2.499999999999)
2
>>> round(1.5)
2
>>> round(0.500000000001)
1
>>> round(0.5)
0
>>> round(0.499999999999)
0

2.5と0.5が四捨五入になっていない(五捨になっている)。
2.5と0.5を少し上回った場合(それぞれ2.500000000001と0.500000000001)は四捨五入になった。
2.5と0.5は、内部処理的に(2進数で処理しているため)、それぞれ2.499999999999と0.499999999999として処理されているからと思われる。

 

補足

>>> round(3, 1)
3
>>> round(3, 2)
3

第1引数が整数(int型)の場合は、第2引数で小数点以下の桁数を指定しても、整数(int型)が返ってくる。

 

>>> from decimal import Decimal, ROUND_HALF_UP
>>> print(Decimal("2.5").quantize(Decimal('0'), ROUND_HALF_UP))
3
>>> print(Decimal("0.5").quantize(Decimal('0'), ROUND_HALF_UP))
1

decimalモジュールのDecimalクラスのquantizeメソッドを使用すると四捨五入可能。

 

参考

Python3エンジニア認定基礎試験 対策(其の2) | TomoOne BLOG(ともわんブログ)
Pythonのround関数の使い方を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
Pythonでround関数による四捨五入の方法を解説! | 侍エンジニアブログ
Pythonのround関数で四捨五入する(初心者のPython入門) - 小さなことをやってみるブログ
[解決!Python]数値を四捨五入する(丸める)には(round関数/decimal.Decimalクラス):解決!Python - @IT