コマンド道場

$ man ceil-floor

CEIL / FLOOR

数値関数

天井(切り上げ)と床(切り捨て)。負の数では TRUNC と結果が違う。

呼び出しの形

CEIL(数値)
CEILING(数値)
FLOOR(数値)

つまずきやすいところ

  • 負の数で TRUNC と結果が違います。 FLOOR は小さいほう、TRUNC は 0 に近いほうです。

  • 整数どうしの割り算は先に切り捨てられますCEIL(45 / 20) は 2 です。小数にしてから割ってください。

  • 戻り値の型は引数の型に従います。numeric を渡せば numeric が返るので、整数として扱いたいときは型変換してください。

実行例

結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。

正と負で並べて見る
SELECT CEIL(1.2) AS c12, CEIL(-1.2) AS c_m12, FLOOR(1.8) AS f18, FLOOR(-1.8) AS f_m18, TRUNC(-1.8) AS t_m18
c12c_m12f18f_m18t_m18
2-11-2-1

1

負の数では FLOOR と TRUNC の結果が違います。

必要な箱の数を求める
SELECT juchu_id, gyo_no, suryo, CEIL(suryo / 20.0) AS hako_su, suryo / 20 AS seisu_warizan FROM juchu_meisai ORDER BY juchu_id, gyo_no
juchu_idgyo_nosuryohako_suseisu_warizan
100112011
100123021
10021210
10022110
10031410
10032210
10041510
100511010

17(うち 8 行を表示)

整数どうしで割ると先に切り捨てられるので、20.0 と小数で割っています。

説明

CEIL大きいほうの整数へ、FLOOR小さいほうの整数へ寄せます。CEILINGCEIL の別名で、意味は同じです。

⚠️ 負の数で TRUNC と食い違います。FLOOR(-1.5)-2(小さいほう)ですが、TRUNC(-1.5)-1(0 に近いほう)です。正の数では同じ結果になるため、負の値が来て初めて表面化します

「何箱必要か」のような計算では CEIL が要ります。20 個入りの箱に 45 個なら CEIL(45 / 20.0) = 3 箱です。⚠️ このとき 45 / 20 と整数どうしで割ると先に 2 になってしまうので、どちらかを小数にしてから割ってください。

次に読む

関係する関数

根拠にした一次情報