【Python】小数点の四捨五入、切り上げ、切り捨て(round, math.ceil, math.floor)

今回は、小数点の四捨五入、切り上げ、切り捨てについてです。

  • 四捨五入は、組み込み関数のround()format()を使います。
    (但し、四捨五入の解釈がpython2とpython3で異なっているので、少し注意が必要です)
  • 切り上げ・切り捨ては、標準の組み込みライブラリのmathモジュールを使います。

これらの関数の使い方について、具体例を交えながら解説します。

# 2020.1.20更新

確認した環境

  • OS: Ubuntu 16.04LTS
  • Python: ver3.7.4

小数点を四捨五入する

標準組込み関数のround() format() を使います。

round(x, n)

基本的な使い方は以下です。

round(number[, ndigits])

引数はそれぞれ、

  • 第一引数number : 四捨五入したい値
  • 第二引数ndigits : 四捨五入後の小数点の桁数

尚、第二引数ndigitsに何も設定しない場合は、その数値に最も近い整数値を返します。

# 円周率を例にします!
>>> a
3.141592653589793

# 第二引数を省略した場合は、最も近い整数値となる
>>> round(a)
3

# 小数点以下1桁 (小数点第二位を四捨五入)
>>> round(a, 1)
3.1

# 小数点以下2桁 (小数点第三位を四捨五入)
>>> round(a, 2)
3.14

# 小数点以下3桁 (小数点第四位を四捨五入)
>>> round(a, 3)
3.142

但し、四捨五入はPython2とPython3で解釈が異なっており、結果が異なる場合があるので注意が必要です。こちらのサイト様が参考になります。

ちなみに、第二引数ndigitsに負の整数を設定すると整数部分が四捨五入されます。

>>> round(1234.567, -2)
1200.0
>>> round(1254.567, -2)
1300.0
>>> round(1254.567, -3)
1000.0
>>> round(1254.567, -4)
0.0

format(x, 書式)

標準関数format()の書式設定を使います。例えば小数点第3位を四捨五入して、小数2位まで表示するには、.2fと指定します。(※)

# 円周率を例にします。
>>> a = 3.141592653589793

# 整数値 (小数点第一位を四捨五入)
>>> format(a, '.0f')
'3'

# 小数点以下1桁 (小数点第二位を四捨五入)
>>> format(a, '.1f')
'3.1'

# 小数点以下2桁 (小数点第三位を四捨五入)
>>> format(a, '.2f')
'3.14'

# 小数点以下3桁 (小数点第四位を四捨五入)
>>> format(a, '.3f')
'3.142'

# 小数点以下5桁 (小数点第六位を四捨五入)
>>> format(a, '.5f')
'3.14159'

※)詳細は下記参照
公式リファレンス:書式指定ミニ言語仕様
【Python】format()による文字列の書式指定 | Hibiki Programming Notes

小数点の切り上げ

math.ceil(x)

math.ceil(x) は、引数 xの天井(ceiling)(x以上の最小の整数値)を返します。

# mathモジュールをインポート
>>> import math

# 円周率を例にします
>>> a = 3.141592653589793

#切り上げ
>>> math.ceil(a) 
4

小数点の切り捨て

小数点の切り捨ては、math.floor(x) int() が使えます。

math.floor(x)

引数 xの床(floor)(x以下の最大の整数値)を返します。

>>> import math

# 円周率を例にします
>>> a = 3.141592653589793

#切り捨て
>>> math.floor(a) 
3

int(x)

引数 xの小数点以下が切り捨てられ整数値が返ります。

>>> import math

# 円周率を例にします
>>> a = 3.141592653589793

#切り捨て
>>> int(a)
3

まとめ

小数点の四捨五入、切り上げ、切り捨ての方法についてまとめました。

  • 四捨五入: round()、format()
  • 切り上げ: math.ceil()
  • 切り捨て: math.floor(), int()

四捨五入については、Python2系とPython3系で解釈が異なっているので注意が必要です。

Learn more...

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!