JavaScript PR

JavaScript – Mathを使って数値を丸める方法:四捨五入/切り上げ/切り捨て(Math.round, Math.ceil, Math.floor)

記事内に商品プロモーションを含む場合があります

JavaScriptを使い始めると、
数値の処理に関するさまざまな場面に出くわします。

例えば、「商品の価格を切り上げて表示したい」
「計算結果の小数点以下をきれいに切り捨てたい」
といった状況です。

本記事では、
初心者の方でも理解できるように、
数値の切り上げに使う Math.ceil() という関数を中心に、
他の丸め処理方法についてもわかりやすく解説します。

Mathオブジェクトとは

まず、Math.ceil() を理解する前に、
JavaScriptの Math オブジェクトについて
少し触れておきましょう。

Math オブジェクトは、
JavaScriptに標準で備わっている
「数学的な計算を行うための道具箱」のようなものです。
この道具箱の中には、
数値を処理するためのさまざまな関数が詰まっており、
その一つが Math.ceil() です。

Math.ceil() の使用方法

Math.ceil() は、
数値を「切り上げる」ための関数です。

例えば、3.2という数値があったとします。
これを切り上げると、4になります。
Math.ceil() を使うと、この操作が簡単に行えます。

let number = 3.2;
let result = Math.ceil(number);
console.log(result); // 出力: 4

この例では、
3.2が4に切り上げられています。
Math.ceil() は常に小数点以下を切り上げ、
次の整数に変換します。
たとえ数値が3.01でも、結果は4になります。

Math.ceil() の詳細な挙動とエッジケース

ここで、Math.ceil() の詳細な挙動について
もう少し掘り下げてみましょう。

Math.ceil() は単に数値を
次の整数に切り上げるだけでなく、
引数として指定された値が数値でない場合でも
その数値に変換して処理を行います。

Math.ceil('12.75');  // 出力: 13
Math.ceil([4.5]);    // 出力: 5
Math.ceil(null);     // 出力: 0
Math.ceil(undefined); // 出力: NaN
Math.ceil(NaN);       // 出力: NaN

この例から分かるように、
Math.ceil() は与えられた値を
数値に変換できる場合には切り上げ処理を行いますが、
変換できない場合は NaN (Not a Number) を返します。

他の丸め処理の方法

数値の処理には、
切り上げ以外にもさまざまな方法があります。
ここでは Math.floor()Math.round() についても簡単に説明します。

Math.floor() を使った切り捨て

Math.floor() は、
数値を「切り捨てる」ための関数です。
切り捨てとは、数値の小数点以下を無視して、
そのままの整数部分だけを取り出す操作です。

let number = 3.8;
let result = Math.floor(number);
console.log(result); // 出力: 3

この例では、3.8が3に切り捨てられています。
どれだけ小数点以下の数値が大きくても、
切り捨てると常にその整数部分だけが残ります。

Math.round() を使った四捨五入

Math.round() は、
数値を「四捨五入」するための関数です。

四捨五入は、
数値の小数点以下が0.5以上なら切り上げ、
0.5未満なら切り捨てる操作です。

let number1 = 3.4;
let result1 = Math.round(number1);
console.log(result1); // 出力: 3

let number2 = 3.6;
let result2 = Math.round(number2);
console.log(result2); // 出力: 4


この例では、3.4は3に、
3.6は4に四捨五入されています。

四捨五入は、
数値をより近い整数に丸めるためによく使われます。

応用編: 小数点以下の桁数を指定した丸め処理

実際の開発では、
小数点以下の特定の桁数で切り上げ、
切り捨て、または四捨五入をしたい場合があります。
このようなケースでは、少し工夫が必要です。
例えば、2桁目で切り上げたい場合、次のようにします。

function roundUp(number, decimalPlaces) {
    let factor = Math.pow(10, decimalPlaces);
    return Math.ceil(number * factor) / factor;
}

let number = 3.14159;
let result = roundUp(number, 2);
console.log(result); // 出力: 3.15


この例では、
3.14159を小数点第2位で切り上げて、
3.15にしています。

この方法を使えば、
さまざまな桁数での丸め処理が可能です。

小数点第1位を四捨五入、切り捨て、切り上げする方法

まずは、
最も基本的な小数点第1位での丸め処理です。

ここでは、Math.round()Math.floor()Math.ceil() を使います。

// 3.5を四捨五入して4にする
var x = Math.round(3.5);
console.log(x); // 出力: 4

// 3.5を切り捨てて3にする
var y = Math.floor(3.5);
console.log(y); // 出力: 3

// 3.5を切り上げて4にする
var z = Math.ceil(3.5);
console.log(z); // 出力: 4

これらの関数は、
単純に小数点以下第1位での丸め処理を
行う場合に非常に便利です。

しかし、
より細かい桁数で丸めたい場合には、
次の方法が必要になります。

小数点第2位を四捨五入、切り捨て、切り上げする方法

小数点第2位での処理を行うためには、
まず数値を10倍にしてから丸め処理を行い、
その後で10で割って元の桁数に戻します。

以下に具体例を示します。

// 3.455を四捨五入して3.5にする
var x = Math.round(3.455 * 10) / 10;
console.log(x); // 出力: 3.5

// 3.455を切り捨てて3.4にする
var y = Math.floor(3.455 * 10) / 10;
console.log(y); // 出力: 3.4

// 3.455を切り上げて3.5にする
var z = Math.ceil(3.455 * 10) / 10;
console.log(z); // 出力: 3.5

この方法を使えば、
小数点第2位での丸め処理が簡単に行えます。
同様にして、他の桁数でも同様の操作が可能です。

小数点第3位を四捨五入、切り捨て、切り上げする方法

さらに小数点第3位での処理を行う場合も、
基本的な考え方は同じです。
数値を100倍してから丸め処理を行い、
100で割って元の桁数に戻します。

// 3.4555を四捨五入して3.456にする
var x = Math.round(3.4555 * 1000) / 1000;
console.log(x); // 出力: 3.456

// 3.4555を切り捨てて3.455にする
var y = Math.floor(3.4555 * 1000) / 1000;
console.log(y); // 出力: 3.455

// 3.4555を切り上げて3.456にする
var z = Math.ceil(3.4555 * 1000) / 1000;
console.log(z); // 出力: 3.456

このように、
特定の桁数で丸め処理を行う際には、
数値を適切に変換してから処理を行い、
その後に元の桁数に戻すことで対応します。
これにより、柔軟な数値処理が可能となります。

実際に書いてみよう

では、ここまで学んだ内容を実際に使って、
簡単なプログラムを書いてみましょう。

例えば、商品価格を税込みで計算し、
小数点以下を切り上げて表示するプログラムを作成してみてください。

function calculateTaxIncludedPrice(price, taxRate) {
    let taxIncludedPrice = price * (1 + taxRate);
    return Math.ceil(taxIncludedPrice);
}

let price = 1000;
let taxRate = 0.08; // 8%の消費税
let finalPrice = calculateTaxIncludedPrice(price, taxRate);
console.log(finalPrice); // 出力: 1080


このプログラムでは、
商品の価格に消費税を加え、
その結果を切り上げています。
ぜひ、自分でもいろいろな数値を使って試してみてください。

ブラウザーの互換性

Math.ceil() やその他の丸め処理関数は、
主要なすべてのブラウザでサポートされています。

そのため、安心してどのブラウザでも使うことができます。
ただし、古いブラウザでは動作しない可能性があるため、
必要に応じてサポートするブラウザのバージョンを確認しておくと良いでしょう。

関連情報と次のステップ

数値の丸め処理は、
JavaScriptの基本的な操作の一つですが、
これを理解することで、
より複雑な数値処理やデータ操作に
進むための基礎を築くことができます。

ここでは、
さらに深く学ぶための関連情報や
次に学ぶべきステップを紹介します。

Mathオブジェクトの他のメソッド

Math.ceil()Math.floor()
Math.round() に加えて、
Math オブジェクトには
他にも便利なメソッドが多数あります。

例えば、ランダムな数値を生成する Math.random() や、
絶対値を求める Math.abs()
三角関数を扱う Math.sin()Math.cos() など、
さまざまな用途に応じたメソッドを学ぶことで、
数学的な処理をさらに効率的に行えるようになります。

  • Math.random()
    0以上1未満の乱数を生成します。
    これを使って、ゲームの開発や、
    データのシャッフルなど、さまざまな用途に応用できます。
  • Math.abs()
    数値の絶対値を返します。
    負の値を正の値に変換したい場合に使用します。

浮動小数点演算の精度と誤差

JavaScriptにおける数値の扱いでは、
特に浮動小数点演算に関する精度と
誤差の問題に注意が必要です。

例えば、
0.1 + 0.2 が 0.3 にならないケースがあるように、
浮動小数点の計算では微小な誤差が発生することがあります。

これを理解し、
必要に応じて誤差を処理する方法を学ぶことで、
より信頼性の高い数値処理が可能になります。

  • 浮動小数点の精度問題
    JavaScriptでは、
    浮動小数点演算が二進法で行われるため、
    特定の値を正確に表現できないことがあります。
    これに対処するために、
    誤差を考慮したプログラムを書くテクニックを学ぶことが重要です。
  • 解決策
    十分な桁数で四捨五入を行う、
    あるいは適切なライブラリを利用して
    精度を管理することが考えられます。

BigIntによる大きな整数の扱い

JavaScriptの標準的な数値型である Number は、
非常に大きな数や非常に小さな数を
正確に扱うことが難しい場合があります。

このようなケースでは、
BigInt 型を使用することで、
任意精度の整数を扱うことができます。
BigInt を使用すれば、
64ビットを超える非常に大きな数を
扱う場合にも精度を保つことができます。

  • BigIntの基本
    BigInt は整数のみを扱うため、
    浮動小数点ではなく整数演算が必要な場合に特に有用です。
    特に暗号化や、大規模な数値計算を行う際に使用されます。
  • 使い方
    数字の後ろに “n” を付けて BigInt を作成します
    (例: let bigNumber = 123456789012345678901234567890n;)。

数値フォーマットと表示

実務では、数値をただ計算するだけでなく、
ユーザーに見やすい形で表示することが求められます。

JavaScriptでは、toFixed()
Intl.NumberFormat などのメソッドを使って、
数値を特定の形式でフォーマットすることができます。

これにより、
金額やパーセンテージなどの表示を簡単に行うことができます。

  • toFixed()
    小数点以下の桁数を指定して
    数値を文字列として返します。

    例えば、
    (123.456).toFixed(2)"123.46" を返します。
  • Intl.NumberFormat
    国際化対応の数値フォーマットを行うためのオブジェクトで、
    通貨やパーセンテージの表示を簡単に行えます。

その他の関連ライブラリやツール

最後に、
JavaScriptの標準的なメソッドに加えて、
数値処理をさらに強化するためのライブラリや
ツールについても触れておきます。

これらのライブラリを使うことで、
より複雑な数値処理や、より精度の高い計算が可能になります。

  • Lodash
    さまざまなユーティリティ関数を
    提供する人気のJavaScriptライブラリで、
    数値処理を含む多くの便利なメソッドが揃っています。
  • Numeral.js
    数値フォーマットに特化したライブラリで、
    金額やパーセンテージなどを容易にフォーマットできます。
  • Math.js
    高度な数学的演算や、
    複雑な数値処理をサポートする強力なJavaScriptライブラリです。

これらの次のステップを学ぶことで、
数値処理に関する知識をさらに深め、
より高度なプログラムを書けるようになります。

まずは、基本的なメソッドを確実に理解し、
その後これらのツールや技術を活用して、
プロフェッショナルな開発に役立ててください。

まとめ

本記事では、
JavaScriptにおける数値の丸め処理について、
特に Math.ceil() を中心に解説しました。

Math.ceil() は数値を切り上げるための便利な関数で、
これを理解することで、
計算結果の処理やデータの表示を正確に行うことができます。

また、Math.floor() を使った切り捨て、
Math.round() を使った四捨五入についても触れ、
それぞれの使い方や特徴をお伝えました。

さらに、
小数点以下の特定の桁数で丸め処理を行う方法も紹介しました。
このテクニックを使えば、より細かい桁数での計算や表示が可能になり、
実際の開発において非常に役立つでしょう。

これにより、数値処理に関する知識がさらに深まり、
より高度なプログラムを作成するための基礎が築けたと思います。

JavaScriptの数値処理は、
プログラミングの基本的なスキルであり、
今後の学びにもつながる重要なテーマです。
ここで得た知識を実際の開発で活用し、
次のステップへと進んでいってください!