JavaScript で浮動小数点数を Int に変換する

Nithin Krishnan 2023年1月30日
  1. JavaScript の parseInt() 関数を使用して Float を Int に変換する
  2. JavaScript で Number.toFixed() を使用して Float を Int に変換する
  3. JavaScript のビット演算子を使用して Float を Int に変換する
  4. JavaScript の Math ライブラリ関数を使用して Float を Int に変換する
  5. まとめ
JavaScript で浮動小数点数を Int に変換する

JavaScript では、以下に示すように、float を int に変換する方法がたくさんあります。

  • parseInt() 関数
  • Number.toFixed() メソッド
  • ビット演算子による変換
    • OR を 0 で適用
    • 二重の NOT 演算子を使用する
    • SHIFT x0
  • javascript で Math ライブラリ関数を使用する
    • Math.floor()
    • Math.round()
    • Math.ceil()
    • Math.trunc()

JavaScript の parseInt() 関数を使用して Float を Int に変換する

parseInt() は JavaScript で広く使用されています。この関数を使用すると、さまざまなデータ型の値を整数型に変換できます。このセクションでは、浮動小数点数から整数への変換について説明します。parseInt() の構文は parseInt(<value>) です。次のコードは、関数の動作を示しています。

console.log(parseInt(123.321));
console.log(parseInt(123.998));

出力:

123
123

備考

  • 詳細については、MSN ドキュメントを参照してください。
  • float 値の変換中、parseInt() は小数を破棄し、float 値の整数部分を返す際に小数を考慮しません。
  • parseInt() は、変換が不可能な場合に NaN を返します。したがって、コードが安全で壊れないように、値を変換するときに isNaN() チェックを含めることをお勧めします。

JavaScript で Number.toFixed() を使用して Float を Int に変換する

Number.toFixed() は、parseInt() とは少し異なる動作をします。数値を最も近い整数値に丸めます。したがって、丸めの事実に注意してください。Number.toFixed() は、 .5 未満の float の 10 進値をより低い整数値に丸めます。10 進値が 0.5 以上の場合、浮動小数点数は次に大きい整数値に丸められます。Number.toFixed() 関数の構文は次のとおりです。

numberObject.toFixed(<number of digits>);

通常、出力の小数点以下の桁数を指定するパラメーターをこの関数に渡す必要があります。デフォルトでは、パラメータは 0 であるため、整数値を返すため、ここでは引数について言及する必要はありません。以下のサンプルコードを参照してください。

console.log( (123.123).toFixed(2) );
console.log( (123.123).toFixed() );
console.log( (123.98).toFixed() );
console.log( (123.49).toFixed() );
console.log( (123.5).toFixed() );

出力:

123.12
123
124
123
124

備考

  • parseInt() メソッドとは異なり、Number.toFixed() は、パラメーターとして渡された浮動小数点値の切り上げを行うため、整数部分の抽出でそれほど有名ではありません。
  • この関数を使用して、float 値のみを変換できます。parseInt() 関数とは異なり、float への文字列値の変換は Number.toFixed() ではサポートされていません。

JavaScript のビット演算子を使用して Float を Int に変換する

parseInt()Number.toFixed() のメソッドを見てきました。これらは両方とも、目的の結果を得るためにいくつかの内部操作を実行します。ビット単位の演算子は、2つの方法と比較した場合、浮動小数点値を整数に変換する際に効率的、高速、かつパフォーマンスが優れています。変換には、次のビット演算子を使用できます。

OR を 0 で適用

ビット単位の OR 演算子を使用して、浮動小数点数の整数部分を取得できます。ビット演算子はバイナリレベルで機能します。オペランド番号を 2 進数に変換し、ビットごとの OR 演算を実行します。許容範囲内の任意の浮動小数点数に OR0 を適用すると、浮動小数点値の整数部分が返されます。以下の例を参照してください。

console.log(123.321 | 0);
console.log(123.5432 | 0);
console.log(123.921 | 0);
console.log(216 | 0);
console.log(-321.456 | 0)

出力:

123
123
123
216
-321

ダブル NOT 演算子の使用

もう 1つのビット演算子は、~記号で表される NOT 演算子です。単項演算子であるため、ビット単位の NOT 演算子を使用して、浮動小数点数の小数部分を取り除くことができます。NOT 演算子は、バイナリレベルで、バイナリビット値を反転します(1 ビットの場合は 0 を返し、0 ビット値の場合は 1 を返します)。つまり、数値が 2 進数で 10110 で表されている場合、それに NOT を適用すると、反転値 01001 が得られます。再び NOT 機能を適用すると、数値の元のビット(10110)が返されます。したがって、NOT 演算子を 2 回適用すると数値が返され、処理中に整数の場合は数値が変更されません。ただし、float 値の場合、NOT 演算子を 2 回適用すると、float 数の整数部分のみが返されます。次の例は、この事実を明確にしています。

console.log(~~(123.321));
console.log(~~(123.53));
console.log(~~(23.97));
console.log(~~(-23.97));
console.log(~~(-0.97));

出力:

123
123
23
-23
0

0 だけ右シフト

ビット単位の右シフト演算子(>> 文字で表される)を適用できます。float 値を整数に変換します。バイナリレベルの下で、ビット単位の右 SHIFT 演算子は、第 2 オペランドで指定されたカウントだけ、オペランドのバイナリビットを右にシフトします。したがって、右側にオーバーフローするビットは無視されます。そうすることで、関数は数値の符号値を保持します。次のコードは、右の SHIFT 演算子の動作を表しています。

console.log(123.321 >> 0);
console.log(123.53 >> 0);
console.log(23.97 >> 0);
console.log(-23.97 >> 0);
console.log(-0.97 >> 0);

出力:

123
123
23
-23
0

備考

  • ビット単位の演算子は、機械語に最も近く、parseInt() または Number.toFixed() によって内部的に実行されるような追加のチェックや操作を実行する必要がないため、より高速です。
  • ORNOT などのビット演算子を多数に適用すると、予期しない結果が生じる可能性があります。10 進値を切り捨てるためにサポートされる最大値は、2147483647(231 -1)です。2147483647 を超える数値は、予期しない結果をもたらします。
  • JavaScript では、浮動小数点数は 64 ビットで表され、1 ビットは符号値(正または負)を保持するために予約され、32 ビットは整数部分に予約されています。ビット単位の演算子は、10 進値を無視して符号付き 32 ビット数を操作します。したがって、float 値の整数部分を取得します。

JavaScript の Math ライブラリ関数を使用して Float を Int に変換する

浮動小数点数から整数を取得するためのさまざまな関数を備えた JavaScript の Math ライブラリを使用できます。ビット単位の演算子とは異なり、これらは値を最も近い数値に丸めたり、値を切り捨てたりするなどの要件に基づいて追加機能を提供します。この目的のために次の方法を使用できます。

Math.floor() による変換

Math.floor() 関数は、パラメーターとして渡された値を次に低い整数値に丸めます。Math.floor() の構文は Math.floor(<float value>) です。以下は、使用法と、float を整数に変換する方法を示すいくつかの例です。

console.log(Math.floor(123.321));
console.log(Math.floor(123.53));
console.log(Math.floor(23.97));
console.log(Math.floor(-23.97));
console.log(Math.floor(-0.97));

出力:

123
123
23
-24
-1

Math.floor(-23.97) のような負の浮動小数点数の場合は混乱しているように見えるかもしれませんが、関数は値を次に小さい整数 -24 に正しく変換します。負の数の数値が大きいほど、実際の値は小さくなることを思い出してください。

Math.round() による変換

Math.floor() 関数とは異なり、Math.round() はパラメーターで渡された値を概算します。小数点以下の値が 5 以上の場合、数値は次に大きい整数に丸められます。それ以外の場合、小数点以下の値が 5 より小さい場合は、小さい方の整数に丸められます。したがって、小数点以下の値に基づいて、Math.round() 関数は Math.floor() または Math.ceil() 関数と同様に動作できます。以下は、Math.round() を使用したいくつかの例です。

console.log(Math.round(123.321));
console.log(Math.round(123.53));
console.log(Math.round(23.97));
console.log(Math.round(-23.97));
console.log(Math.round(-0.97));

出力:

123
124
24
-24
-1

Math.ceil() による変換

Math.ceil() 関数は、Math.floor() 関数とは逆の動作をします。Math.floor() のように次に低い整数に丸める代わりに、Math.ceil() は次に高い整数値を返します。以下は、Math.ceil() を使用したいくつかの変換です。

console.log(Math.ceil(123.321));
console.log(Math.ceil(123.53));
console.log(Math.ceil(23.97));
console.log(Math.ceil(-23.97));
console.log(Math.ceil(-0.97));

出力:

124
124
24
-23
-0

Math.trunc() による変換

名前が示すように、Math.trunc() 関数は 10 進値を切り捨て、float 値の整数部分を返します。この方法は、前に説明したビット演算子と同様と見なすことができます。ここでは、最も近い整数への四捨五入はありません。代わりに、float 値の整数部分をそのまま返します。以下は、Math.trunc() のいくつかの使用例です。

console.log(Math.trunc(123.321));
console.log(Math.trunc(123.53));
console.log(Math.trunc(23.97));
console.log(Math.trunc(-23.97));
console.log(Math.trunc(-0.97));

出力:

123
123
23
-23
-0

まとめ

浮動小数点値から整数部分を取得するには、さまざまな方法があります。ビット単位の演算子は、変換やその他の処理を必要とせずにバイナリレベルで操作を実行するため、実行が高速になります。parseInt()Math.trunc() およびビット演算子(OR0、ダブル NOT、右シフトは 0)は、浮動小数点値を引き裂くかのように正確な整数を返します。小数点で、その中の整数部分だけを返します。浮動小数点数を処理して丸めたり、ビジネス要件に基づいて最も近い整数を取得したりする場合は、Number.toFixed()Math.round()Math.ceil() および Math.floor() 関数を選択するとよいでしょう。

関連記事 - JavaScript Integer