JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

【JavaScript】10進数を切り上げる関数を自作する方法|Math.ceil相当の実装を解説

JavaScriptでは、Mathオブジェクトに標準で用意されているMath.ceil()メソッドを使うことで、小数を簡単に切り上げることができます。本記事では、このceil相当の機能を持つ関数を自分で実装する方法を、コード例とともにわかりやすく解説します。


課題

私たちが作成するのは、JavaScriptのMathクラスに属するような関数です。

この関数は、呼び出された10進数(小数)に対して、それ以上で最も近い整数、つまり「切り上げた値」を返す必要があります。

また、渡された数値がすでに整数である場合は、その値をそのまま返す仕様とします。

解決のアプローチ

この問題は、次の手順で解決できます。

  • 型チェックtypeof演算子で引数が数値型かどうかを確認し、数値以外ならNaNを返す
  • 整数チェック:剰余演算子%を使い、1で割った余りが0なら整数と判断してそのまま返す
  • 切り上げ処理:数値を文字列に変換して小数点で分割し、整数部分に1を加えて返す

コード例

以下が実際のコードです。

const num = 234.56;
Math.ceil = function(num){
    if(typeof num !== 'number'){
        return NaN;
    };
    if(num % 1 === 0){
        return num;
    };
    const [main] = String(num).split('.');
   
    return +main + 1;
};
console.log(Math.ceil(num));

コードの解説

この関数の動作を順番に見ていきましょう。

まず、typeof演算子によって引数が数値型であることを確認します。数値以外が渡された場合にはNaNを返して不正な入力に対応します。

次に、num % 1 === 0という条件式で、数値がすでに整数かどうかを判定しています。剰余演算子%により、1で割った余りが0であれば整数だとみなせるためです。

最後に、String(num).split('.')で数値を文字列化して小数点「.」で分割し、整数部分だけを取り出します。そして単項プラス演算子(+)で文字列を数値へ戻したうえで1を加えることで、切り上げの結果を実現しています。

出力結果

コンソールには次のように表示されます。

235

注意点

この実装にはいくつか留意すべきポイントがあります。

  • 負の数への非対応:例えば-234.56のような負の小数では、正しい切り上げ結果は-234ですが、このロジックでは-233が返されてしまいます。負数にも対応させたい場合は、符号の判定を追加するなどの工夫が必要です。
  • 組み込みメソッドの上書き:サンプルでは説明のためMath.ceilを上書きしていますが、実際の開発では既存の組み込みメソッドを書き換えることは避け、独自の関数名(例:customCeil)で定義するのが安全です。

実務で単純に切り上げを行いたい場合は、標準のMath.ceil()を使えば十分であり、今回のような自作実装は学習や理解を深めるための良い練習題材になります。

  1. JavaScriptで数値の小数部分のみを取得する方法

    JavaScriptでは、数値から小数点以下の部分だけを取り出したい場面があります。本記事では、数値を文字列として処理し、小数部分を正確に抽出して返す関数の実装方法を解説します。 問題の概要 数値を受け取るJavaScript関数を作成します。この関数は、引数として渡された数値のうち、小数点(.)より後ろの部分だけを取り出し、数値として返す必要があります。 実装例 以下がそのコードです。 const num = 435.43436; const retrieveDecimalPart = (num = 1) => { const str = String(num); le

  2. C#で数値を最も近い偶数に丸める方法|MidpointRounding.ToEvenの使い方

    C#で数値を最も近い偶数に丸めるには、MidpointRounding列挙型のToEvenを使用します。この丸め方式は「銀行家の丸め」としても知られており、丸め対象の数値がちょうど中間値(たとえば25.5など)だった場合に、単純に切り上げるのではなく、より近い偶数側へ丸められるのが特徴です。 まず、丸め対象となるdecimal型の数値を宣言して初期化します。 decimal val = 25.55M; 数値を最も近い偶数に丸めるには、decimal.Roundメソッドの第3引数にMidpointRounding.ToEvenを指定します。 decimal.Round(val, 0, Midpo