数値を丸める関数

当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

数値を丸める方法

Python では組み込みの関数やモジュールを用いて数値を丸めることが可能です。この記事では組み込みの round() 関数や NumPy の round() 関数、format メソッドを使って数値を丸める方法について解説します。

round()

Python の組み込み関数 round() は受け取った整数または浮動小数点数を指定した桁で丸めます。第1引数のみを指定した場合は小数点を丸めて整数を返します。

# PYTHON_ROUND

# In[1]

# 10.4を丸める
a = round(10.4)

# 10.5を丸める
b = round(10.5)

# 11.4を丸める
c = round(11.4)

# 11.5を丸める
d = round(11.5)

print([a, b, c, d])
# [10, 10, 11, 12]

コードの実行結果を見ると、round(11.5) は 12 となっていますが、round(10.5) は 11 とはならずに 10 が返っています。これは round()関数が 偶数丸め(銀行丸め) という手法で端数を処理していることを意味します。偶数丸めは基本的に四捨五入に即して端数を処理しますが、端数が 0.5 のときに結果が偶数となるように丸めます。この手法を採用することで四捨五入で発生するバイアス(偏り)を避けることができます。
 
第2引数に数値 m を指定して、round(数値, m) と記述した場合、小数点以下 m 桁まで残すように丸めます。

# In[2]

a = round(3.141592, 1)
b = round(3.141592, 2)
c = round(3.141592, 3)

print([a, b, c])
# [3.1, 3.14, 3.142]

第2引数に負数を指定して整数部分を丸めることもできます。

# In[3]

a = round(12345, -1)
b = round(12345, -2)
c = round(12345, -3)

print([a, b, c])
# [12340, 12300, 12000]

numpy.round()

numpy.round() は受け取った数値または配列 (ndarray) の各要素に対して偶数丸めします。第 1 引数のみが渡された場合は整数部分の末尾の桁に丸めます。

# NUMPY_ROUND

# In[1]

import numpy as np

# 配列の定義
x = np.array([10.4, 10.5, 11.4, 11.5])

# 配列の各要素を偶数丸め
x = np.round(x)

print(x)
# [10. 10. 11. 12.]

第2引数に数値 m を指定した場合、小数点以下 m 桁まで残すように丸めます。

# In[2]

# 配列の定義
x = np.array([3.14159, 2.71828])

# 配列の各要素を小数点以下2桁に丸める
x = np.round(x, 2)

print(x)[3.14 2.72]

第2引数に負数を指定して、任意の桁の整数部分を丸めることもできます。

# In[3]

# 配列の定義
x = np.array([12345, 56789])

# 配列の各要素を下3桁に丸める
x = np.round(x, -2)

print(x)
# [12300 56800]

format()

format() メソッドで数値を丸めることもできます。この場合も「偶数丸め」で処理されます。ただし、戻り値は文字列なので、必要に応じて数値に戻してください。

# PYTHON_ROUND_FORMAT

# 整数だけを残す
a = "{:.0f}".format(10.5)

# 小数点以下1桁を残す
b = "{:.2f}".format(2.71828)

# 小数点以下3桁を残す
c = "{:.3f}".format(3.14159)

num = [a, b, c]

print(num)
# ['10', '2.72', '3.142']

コメント

  1. HNaito より:

    format( ) メソッドの戻り値は print( ) の引数としてしか使っていなかったので今までわからなかったのですが、format( ) メソッドの戻り値が 「文字列」であることを初めて認識させていただきました。

    • あとりえこばと より:

      確かに、format( ) メソッドを print() 関数の引数以外で使う機会はほとんどないので、普段は戻り値を意識することはないですね。Jupyter Notebook で
      “{:.0f}”.format(3.14)
      と打って実行すると ‘3’ と表示されます。

  2. あとりえこばと より:

    【AI連載小説】科学とコードの交差点(11)
     
    開誠はコンピュータ画面を見つめながら言った。「数値をどのように丸めるか、これが結構悩ましい問題だよな」
     
    明信も同意しながら、「そうだね。丸めるときに生じる誤差が、計算結果にどれだけ影響を与えるか考える必要がある」

    開誠はノートにメモを取りながら続けた。「Pythonでは、round()関数やnumpyのaround()メソッドが簡単に使えるけど、どちらも場合によっては注意が必要だよね。」
     
    明信は深く考え込んでから言った。「確かに、round()は四捨五入だけど、around()は偶数に丸めるから微妙に違う。どちらが適しているかは、具体的な状況に依存するかもしれない」
     
    開誠はにやりと笑って言った。「それに加えて、計算の途中でどの段階で丸めるかも重要だよね。途中で誤差が累積する可能性があるから」

    彼らはPythonコードを書きながら、異なる丸め方が生じる影響について検討したり、データの特性に合わせて最適な丸め方を見つけるためにアイデアを出し合ったりしていた。その過程で、計算の正確性と効率性の両立に向けて、新しい手法や洞察を見つけ出していった。