JavaScriptで小数点を丸める方法:四捨五入・切り捨て・切り上げ(Math.round / Math.floor / Math.ceil)

プログラミングで数値を扱うとき、「小数点以下をどう処理するか」はとても重要です。例えば、料金の計算や平均値の表示などで「四捨五入」「切り上げ」「切り捨て」をしたい場面はよくあります。

JavaScriptには、この処理を簡単に行えるMath.floor(切り捨て)、Math.ceil(切り上げ)、Math.round(四捨五入)という便利なメソッドがあります。

この記事では、それぞれの特徴や使い方をサンプルコード付きでわかりやすく解説します。「負の数の場合どうなるの?」「0.5の扱いは?」といった細かい部分も丁寧に見ていきましょう。

小数点以下を四捨五入する(Math.round)

小数点以下を四捨五入する(Math.round)

Math.roundは、数値の小数点以下を四捨五入して整数を返すメソッドです。

小数点が「.5」のときは「大きい数値の方向」に丸める(負の数でも -3.5 → -3)のが特徴です。

書式はシンプルで、以下のように書きます。

Math.round(数値);

Math.roundの例

console.log(Math.round(3.4)); // 3
console.log(Math.round(3.5)); // 4
console.log(Math.round(3.6)); // 4
  • 3.4 → 四捨五入して3
  • 3.5 → 四捨五入して4
  • 3.6 → 四捨五入して4

負の数の場合の注意点

正の数はイメージしやすいのですが、負の数では挙動に注意が必要です。

console.log(Math.round(-3.4)); // -3
console.log(Math.round(-3.5)); // -3
console.log(Math.round(-3.6)); // -4
  • -3.4 → -3に丸められる
  • -3.5 → 小数点が「.5」の場合、正の方向(大きい数値の方向)の-3に丸められる
  • -3.6 → -4に丸められる

つまり、小数点が「.5」のときは「正の方向(大きい数値の方向)」に丸められるというルールがあります。このため、-3.5-4ではなく-3になる点は混乱しやすいポイントです。

数値以外を渡した場合

Math.roundに数値ではない値を渡した場合、自動的に数値に変換されます。

console.log(Math.round("12.75"));   // 13 (文字列 → 数値変換後に四捨五入)
console.log(Math.round([5.2]));     // 5   (配列 → 数値に変換)
console.log(Math.round(null));      // 0   (null → 0)
console.log(Math.round(undefined)); // NaN (変換できないので NaN)

小数点第n位で四捨五入する方法

小数点第n位で四捨五入するには、まず数値を10のn乗倍してから四捨五入し、その後10のn乗で割ります。例えば、小数点第2位で四捨五入するには、数値を100倍してから、四捨五入し、その後100で割ります。サンプルコードを以下に示します。

// 小数点第2位に四捨五入
console.log(Math.round(123.456 * 100) / 100); // 出力: 123.46
// 小数点第1位に四捨五入
console.log(Math.round(123.456 * 10) / 10); // 出力: 123.5

上記のサンプルコードでは、123.456を100倍してから四捨五入し、再び100で割ることで小数点第2位に四捨五入しています。同様に、123.456を10倍してから四捨五入し、再び10で割ることで小数点第1位に四捨五入しています。

toFixed()を使用して四捨五入する方法

toFixed()メソッドは、数値を指定した小数点以下の桁数に四捨五入した文字列を返します。このメソッドは特に、特定の小数点以下の桁数に四捨五入したい場合に便利です。サンプルコードを以下に示します。

const num = 4.5678;

console.log(num.toFixed(2)); // 出力: "4.57"
console.log(num.toFixed(0)); // 出力: "5"

上記のサンプルコードでは、toFixed()メソッドを使用して、数値4.5678を小数点以下2桁に四捨五入し、文字列として出力しています。また、小数点以下0桁に四捨五入して整数として出力しています。

小数点以下を切り上げる(Math.ceil)

小数点以下を切り上げる(Math.ceil)

Math.ceilは、数値の小数点以下を切り上げて整数を返すメソッドです。

常に正の方向(大きい数値の方向)へ丸めるのが特徴です。

書式は次の通りです。

Math.ceil(数値);

Math.ceilの例

console.log(Math.ceil(3.2)); // 4
console.log(Math.ceil(3.8)); // 4
console.log(Math.ceil(3.0)); // 3
  • 3.2 → 切り上げて4
  • 3.8 → 切り上げて4
  • 3.0 → すでに整数なのでそのまま3

負の数の場合の注意点

負の数に対しても「切り上げ」が適用されます。ただし、「切り上げ」は常に正の方向(大きい数値の方向)へというルールに従います。

console.log(Math.ceil(-3.2)); // -3
console.log(Math.ceil(-3.8)); // -3
console.log(Math.ceil(-3.0)); // -3
  • -3.2 → -3(正の方向へ)
  • -3.8 → -3(正の方向へ)
  • -3.0 → そのまま-3

ポイントは、負の数を切り上げると絶対値が小さくなることです。

数値以外を渡した場合

こちらもMath.roundと同様に、数値変換が行われます。

console.log(Math.ceil("12.75"));   // 13
console.log(Math.ceil([-4.445]));  // -4
console.log(Math.ceil(null));      // 0
console.log(Math.ceil(undefined)); // NaN

小数点第n位で切り上げする方法

小数点第n位で切り上げするには、まず数値を10のn乗倍してから切り上げ、その後10のn乗で割ります。例えば、小数点第2位で切り上げするには、数値を100倍してから、切り上げ、その後100で割ります。サンプルコードを以下に示します。

// 小数点第2位に切り上げ
console.log(Math.ceil(123.456 * 100) / 100); // 出力: 123.46
// 小数点第1位に切り上げ
console.log(Math.ceil(123.456 * 10) / 10); // 出力: 123.5

上記のサンプルコードでは、123.456を100倍してから切り上げし、再び100で割ることで小数点第2位に切り上げしています。同様に、123.456を10倍してから切り上げし、再び10で割ることで小数点第1位に切り上げしています。

小数点以下を切り捨てる(Math.floor)

小数点以下を切り捨てる(Math.floor)

Math.floorは、数値の小数点以下を切り捨てて整数を返すメソッドです。

常に負の方向(小さい数値の方向)へ丸めるのが特徴です。

書式は次の通りです。

Math.floor(数値);

Math.floorの例

console.log(Math.floor(3.2)); // 3
console.log(Math.floor(3.8)); // 3
console.log(Math.floor(3.0)); // 3
  • 3.2 → 小数点を切り捨てて3
  • 3.8 → 小数点を切り捨てて3
  • 3.0 → すでに整数なのでそのまま3

負の数の場合の注意点

負の数に対しても「切り捨て」が適用されます。ただし、「切り捨て」は常に負の方向(小さい数値の方向)へというルールに従います。

console.log(Math.floor(-3.2)); // -4
console.log(Math.floor(-3.8)); // -4
console.log(Math.floor(-3.0)); // -3
  • -3.2 → -4(負の方向へ)
  • -3.8 → -4(負の方向へ)
  • -3.0 →そのまま-3

ポイントは、負の数を切り捨てると絶対値が大きくなることです。

数値以外を渡した場合

こちらもMath.roundと同様に、数値変換が行われます。

console.log(Math.floor("12.75"));   // 12
console.log(Math.floor([-4.445]));  // -5
console.log(Math.floor(null));      // 0
console.log(Math.floor(undefined)); // NaN

小数点第n位で切り捨てする方法

小数点第n位で切り捨てするには、まず数値を10のn乗倍してから切り捨て、その後10のn乗で割ります。例えば、小数点第2位で切り捨てするには、数値を100倍してから、切り捨て、その後100で割ります。サンプルコードを以下に示します。

// 小数点第2位に切り捨て
console.log(Math.floor(123.456 * 100) / 100); // 出力: 123.45
// 小数点第1位に切り捨て
console.log(Math.floor(123.456 * 10) / 10); // 出力: 123.4

この例では、123.456を100倍してから切り捨てし、再び100で割ることで小数点第2位に切り捨てしています。同様に、123.456を10倍してから切り捨てし、再び10で割ることで小数点第1位に切り捨てしています。

Math.trunc()を使用して切り捨てする方法

Math.trunc()メソッドは、数値の小数点以下を切り捨て、整数部分だけを返します。このメソッドは、正の数と負の数の両方に対して小数点以下を単純に取り除くため、Math.floor()とは異なります。サンプルコードを以下に示します。

const num1 = 4.7;
const num2 = -4.7;

console.log(Math.trunc(num1)); // 出力: 4
console.log(Math.trunc(num2)); // 出力: -4

上記のサンプルコードでは、Math.trunc()メソッドを使用して、それぞれの数値を切り捨てています。num14.7なので4に切り捨てられ、num2-4.7なので-4に切り捨てられます。

Math.floor()とMath.trunc()の違い

Math.floor()Math.trunc()の違いは、負の数に対する処理方法です。Math.floor()は負の数を最も近い小さい整数に切り捨てますが、Math.trunc()は単に小数点以下を単純に切り捨てます。サンプルコードを以下に示します。

const num = -4.7;

console.log(Math.floor(num)); // 出力: -5
console.log(Math.trunc(num)); // 出力: -4

上記のサンプルコードでは、負の数-4.7に対するMath.floor()Math.trunc()の違いを示しています。Math.floor()-5に切り捨てられ、Math.trunc()-4に切り捨てられます。

本記事のまとめ

この記事ではMath.floor(切り捨て)、Math.ceil(切り上げ)、Math.round(四捨五入)について、説明しました。

これらの違いを表に整理したものを以下に示します。

メソッド役割(動作)正の数の例負の数の例特徴・注意点
Math.round四捨五入して整数にする3.5 → 4-3.5 → -3小数点が「.5」のときは「大きい数値の方向」に丸める(負の数でも -3.5 → -3)
Math.ceil小数点以下を切り上げ、より大きい整数にする3.2 → 4-3.8 → -3常に正の方向(大きい数値の方向)へ丸める
Math.floor小数点以下を切り捨て、より小さい整数にする3.8 → 3-3.2 → -4常に負の方向(小さい数値の方向)へ丸める

お読み頂きありがとうございました。

スポンサーリンク