数値を丸める関数

数値を丸める関数

数値を丸める方法

round()関数

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

# round()関数のサンプルコード①

# 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("round(10.4) ⇒", a)
print("round(10.5) ⇒", b)
print("round(11.4) ⇒", c)
print("round(11.5) ⇒", d)
round(10.4) ⇒ 10
round(10.5) ⇒ 10
round(11.4) ⇒ 11
round(11.5) ⇒ 12

 コードの実行結果を見ると、round(11.5) は 12 となっていますが、round(10.5) は 11 とはならずに 10 が返っています。これは round()関数が偶数丸め(銀行丸め)という手法で端数を処理していることを意味します。偶数丸めは基本的に「四捨五入」に即して端数を処理しますが、端数が 0.5 のときに結果が偶数となるように丸めます。この手法を採用することで「四捨五入」で発生するバイアス(偏り)を避けることができます。

 第 2 引数に数値 m を指定して、round(数値, m) と記述した場合、小数点以下 m 桁まで残すように丸めます。

# round()関数のサンプルコード②

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

print("round(3.141592, 1) ⇒", a)
print("round(3.141592, 2) ⇒", b)
print("round(3.141592, 3) ⇒", c)
round(3.141592, 1) ⇒ 3.1
round(3.141592, 2) ⇒ 3.14
round(3.141592, 3) ⇒ 3.142

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

# round()関数の使用例③

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

print("round(12345, -1) ⇒", a)
print("round(12345, -2) ⇒", b)
print("round(12345, -3) ⇒", c)
round(12345, -1) ⇒ 12340
round(12345, -2) ⇒ 12300
round(12345, -3) ⇒ 12000

 

numpy.round()関数

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

# numpy.round()関数のサンプルコード①

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 桁まで残すように丸めます。

# numpy.round()関数のサンプルコード②

import numpy as np

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

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

print(x)
[3.14 2.72]

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

# numpy.round()関数のサンプルコード③

import numpy as np

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

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

print(x)
[12300 56800]

 

format()メソッド

 format()メソッドに数値を渡して丸めることもできます。
 この場合も「偶数丸め」で処理されます。戻り値は文字列です。

# 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']