数値を丸める方法
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']
コメント
format( ) メソッドの戻り値は print( ) の引数としてしか使っていなかったので今までわからなかったのですが、format( ) メソッドの戻り値が 「文字列」であることを初めて認識させていただきました。
確かに、format( ) メソッドを print() 関数の引数以外で使う機会はほとんどないので、普段は戻り値を意識することはないですね。Jupyter Notebook で
“{:.0f}”.format(3.14)
と打って実行すると ‘3’ と表示されます。