環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

PythonとNumPyにおける数値の切り上げと切り下げ(ceilとfloor):floorとtruncの違いに注意しよう

最終更新日 2023.02.18

小数の切り上げと切り下げ(切り捨て)は ceil と floor を使います。これは Python のビルト・イン関数でなく math パッケージにあります。

import math

a = math.ceil(3.14)
b = math.floor(3.14)

print(a)  # 4
print(b)  # 3

複数個の値を切り上げ・切り捨てするときは NumPy を使うといいでしょう。NumPy にも同名の関数があります。

import numpy as np

a = np.ceil(3.14)
b = np.floor(3.14)

print(a)  # 4.0
print(b)  # 3.0

NumPy で複数個の小数を切り上げ・切り捨てする

NumPy の配列を使うと、複数個の小数を切り上げ・切り下げ(切り捨て)できます。

import numpy as np

x = np.array([2.5, 8.3])

a = np.ceil(x)
b = np.floor(x)

print(a)  # [3. 9.]
print(b)  # [2. 8.]

ceil と floor に配列を入れると、配列の要素をそれぞれ処理して返します。

NumPy の切り捨てには trunc もある

NumPy の切り捨ては floor と trunc があります。

import numpy as np

a = np.ceil(3.14)
b = np.floor(3.14)
c = np.trunc(3.14)

print(a)  # 4.0
print(b)  # 3.0
print(c)  # 3.0

floor と trunc の違いは下のコードを見るとわかります。

import numpy as np

x = np.array([-2.8, -1.2, -0.7, 0, 0.5, 1.8])

a = np.floor(x)
b = np.trunc(x)

print(a)  # [-3. -2. -1.  0.  0.  1.]
print(b)  # [-2. -1. -0.  0.  0.  1.]

マイナス値の処理が変わっています。trunc は切り捨てというより、単に整数部分をとっています。

  • floor は切り捨て
  • trunc は整数部分を返す

いわゆる「切り捨て」をしたいときは floor のほうがいいでしょう。