Sassでレイアウトを計算するとき、小数点以下を切り上げたり切り捨てたりしたい場面があります。Sassには ceil()(切り上げ)と floor()(切り捨て)がありますが、現在のDart Sassではグローバル版は非推奨で、math.ceil() / math.floor() を使うのが正しい書き方です。この記事では、正しい使い方と負の数での挙動、桁数指定の方法までまとめます。
この記事の結論:切り上げは
math.ceil()、切り捨ては math.floor() を使います。先頭で @use "sass:math"; を読み込みます。四捨五入は math.round() です。切り上げ(math.ceil)と切り捨て(math.floor)
math.ceil() は小数点以下を切り上げて整数にし、math.floor() は切り捨てて整数にします。先頭で sass:math モジュールを読み込んでおきます。
math.ceil / math.floor
@use "sass:math";
.up { width: math.ceil(3.2); } // 4(切り上げ)
.down { width: math.floor(3.8); } // 3(切り捨て)
グローバルの
ceil() / floor() は非推奨です。モジュールを使わずに ceil(3.2) と書くと、「Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0. Use math.ceil instead.」という警告が出ます。@use "sass:math"; を読み込んで math.ceil() / math.floor() を使ってください。負の数での挙動に注意
切り上げ・切り捨ては「数直線上で大きい方/小さい方の整数へ動かす」操作です。そのため負の数では直感とずれることがあります。
負の数の切り上げ・切り捨て
@use "sass:math";
.a { x: math.ceil(-3.2); } // -3(大きい方へ → 0に近づく)
.b { x: math.floor(-3.2); } // -4(小さい方へ → 0から離れる)
「絶対値を切り捨てたい(0方向に丸めたい)」場合は注意が必要です。負の数では
math.floor() は0から離れる方向に動きます。符号を取り除きたいだけなら絶対値(math.abs)を使ってから処理します。小数第N位で切り上げ・切り捨てる
math.ceil() / math.floor() は整数にしか丸められません。「小数第2位まで残して切り上げ」のように桁を指定したい場合は、10のべき乗を掛けて丸め、割って戻すカスタム関数を用意します。
桁数を指定できる切り上げ・切り捨て
@use "sass:math";
@function ceil-to($value, $digits: 0) {
$factor: math.pow(10, $digits);
@return math.div(math.ceil($value * $factor), $factor);
}
@function floor-to($value, $digits: 0) {
$factor: math.pow(10, $digits);
@return math.div(math.floor($value * $factor), $factor);
}
.a { x: ceil-to(3.14159, 2); } // 3.15
.b { x: floor-to(3.14159, 2); } // 3.14
round・ceil・floorの違い
| 関数 | 動作 | 3.4 | 3.6 |
|---|---|---|---|
math.round() |
四捨五入 | 3 | 4 |
math.ceil() |
切り上げ | 4 | 4 |
math.floor() |
切り捨て | 3 | 3 |
よくある質問(FAQ)
Qceil()やfloor()で非推奨の警告が出ます。
Aグローバルの
ceil() / floor() は非推奨(Dart Sass 3.0で削除予定)です。@use "sass:math"; を読み込み、math.ceil() / math.floor() を使ってください。Qmath.floor(-3.2)が-4になるのはなぜですか?
A切り捨ては「数直線上で小さい方の整数へ動かす」操作だからです。
-3.2 より小さい整数は -4 です。0に近づける(0方向に丸める)動きとは異なる点に注意してください。Q小数第2位まで残して切り上げたいです。
A整数への
math.ceil() だけではできません。本文の ceil-to() のように、10のべき乗を掛けて切り上げ、math.div() で割って戻すカスタム関数を使います。Q四捨五入・切り上げ・切り捨てはどう使い分けますか?
A
math.round() は四捨五入、math.ceil() は常に切り上げ、math.floor() は常に切り捨てです。「足りないと困る」なら切り上げ、「超えると困る」なら切り捨て、というように用途で選びます。まとめ
Sassで小数点以下を切り上げ・切り捨てるポイントを整理します。
- 切り上げは
math.ceil()、切り捨てはmath.floor() - グローバル
ceil()/floor()は非推奨(Dart Sass 3.0で削除予定) - 負の数では
floor(-3.2)=-4のように0から離れる方向に動く - 桁数指定は
math.pow+math.divのカスタム関数で - 四捨五入は
math.round()。用途で使い分ける
関連として、round()で四捨五入・数値の絶対値を取得・数値から単位を除去もあわせて読むと、Sassの数値処理に強くなれます。

