JavaScript 逆引き集 | 数値の丸め(Math)

JavaScript JavaScript
スポンサーリンク
スポンサーリンク

数値の「丸め方」をきちんと選ぶという発想

Math.round, Math.ceil, Math.floor は、数値を「整数」に丸めるための 3 種類のメソッドです。 どれも「小数をどう扱うか」を決めるための道具ですが、丸め方のルールがそれぞれ違うところが重要です。

天才プログラマー視点で言うと、「どの方向に丸めたいか」を意識して選べるようになることが、数値処理の基礎体力になります。

Math.round — 一般的な四捨五入

Math.round(x) は、もっともよく知られている「四捨五入」です。

console.log(Math.round(3.2)); // 3
console.log(Math.round(3.5)); // 4
console.log(Math.round(3.8)); // 4
JavaScript

小数点以下が 0.5 未満なら切り捨て、0.5 以上なら切り上げます。 「一番近い整数に丸める」と覚えていただくと分かりやすいです。

マイナスの場合も同じルールで動きます。

console.log(Math.round(-3.2)); // -3
console.log(Math.round(-3.5)); // -3
console.log(Math.round(-3.8)); // -4
JavaScript

ここでのポイントは、「0 からの距離が近い方の整数に寄せる」というイメージです。

Math.ceil — 常に「上」に切り上げる

Math.ceil(x) は、小数点以下が少しでもあれば「次の大きい整数」に切り上げるメソッドです。

console.log(Math.ceil(3.1)); // 4
console.log(Math.ceil(3.9)); // 4
console.log(Math.ceil(3.0)); // 3
JavaScript

「天井(ceiling)」に向かって丸める、とイメージすると覚えやすいです。

マイナスの場合は少し感覚がズレますが、ルールは「より大きい整数」です。

console.log(Math.ceil(-3.1)); // -3
console.log(Math.ceil(-3.9)); // -3
JavaScript

-3.1 や -3.9 より「大きい」整数は -3 なので、そちらに寄ります。 「値を絶対に小さくしない方向に丸めたい」ときに使うと考えていただくとよいです。

Math.floor — 常に「下」に切り捨てる

Math.floor(x) は、小数点以下を必ず切り捨てて「それ以下の最大の整数」にするメソッドです。

console.log(Math.floor(3.1)); // 3
console.log(Math.floor(3.9)); // 3
console.log(Math.floor(3.0)); // 3
JavaScript

「床(floor)」に向かって丸める、と覚えていただくとイメージしやすいです。

マイナスの場合は、「より小さい整数」に寄ります。

console.log(Math.floor(-3.1)); // -4
console.log(Math.floor(-3.9)); // -4
JavaScript

-3.1 や -3.9 より「小さい」整数は -4 なので、そちらに寄ります。 「値を絶対に大きくしない方向に丸めたい」ときに使うと考えると分かりやすいです。

例題:ページ数や人数の計算で丸め方を選ぶ

例えば、「アイテム 10 個を 3 個ずつのページに分ける」とします。

const items = 10;
const perPage = 3;

const pagesRound = Math.round(items / perPage); // 3
const pagesCeil  = Math.ceil(items / perPage);  // 4
const pagesFloor = Math.floor(items / perPage); // 3

console.log(pagesRound, pagesCeil, pagesFloor);
JavaScript

実際には「足りない分も含めてページを用意したい」ので、 必要なページ数は Math.ceil(items / perPage) を使うのが正解になります。

このように、 「足りない分も確保したいなら ceil」 「超えない範囲で抑えたいなら floor」 「単純に近い整数にしたいなら round」 という使い分けが重要です。

例題:料金計算での丸め方の違い

料金計算では、丸め方の違いがそのまま金額の違いになります。

const price = 123.456;

console.log(Math.round(price)); // 123
console.log(Math.ceil(price));  // 124
console.log(Math.floor(price)); // 123
JavaScript

「1 円未満を切り捨てる」なら Math.floor。 「1 円未満を切り上げる」なら Math.ceil。 「四捨五入したい」なら Math.round

どの丸め方が仕様として正しいかを、先に決めてからメソッドを選ぶことが大切です。

まとめ:丸め方を意識して Math.round / ceil / floor を選ぶ

Math.round, Math.ceil, Math.floor は、

  • round:一番近い整数に四捨五入する
  • ceil:常に上方向(より大きい整数)に丸める
  • floor:常に下方向(より小さい整数)に丸める

という、はっきりした役割の違いがあります。

「この場面では、値をどちら側に寄せるのが正しいか」を意識して、 3 つのうちどれを使うか選べるようになることが、数値処理の基本になります。

タイトルとURLをコピーしました