JavaScript 数値型判定
JavaScriptにおける数値型の判定 (float vs. integer)
**JavaScriptでは、数値型(number)の内部表現はすべて浮動小数点数です。**そのため、整数と小数を厳密に区別することはできません。
しかし、特定の条件や操作によって、数値が整数として扱われるか、浮動小数点数として扱われるかを判断することができます。
Number.isInteger() メソッド:
- 整数であれば
true
、そうでなければfalse
を返します。 - このメソッドは、引数として受け取った数値が整数かどうかを判定します。
let num = 10;
console.log(Number.isInteger(num)); // Output: true
num = 3.14;
console.log(Number.isInteger(num)); // Output: false
剰余演算子 (%) を使用:
- 数値を 1 で除算したときの剰余が 0 であれば、その数値は整数です。
let num = 5;
if (num % 1 === 0) {
console.log("Number is an integer");
} else {
console.log("Number is a float");
}
Math.floor() 関数:
- 元の数値と切り捨てた数値が等しければ、その数値は整数です。
- この関数は、数値を切り捨てた整数値を返します。
let num = 7.5;
if (num === Math.floor(num)) {
console.log("Number is an integer");
} else {
console.log("Number is a float");
}
注意
- こうした問題を回避するためには、数値の精度や範囲を考慮して適切な判定方法を選択する必要があります。
- 例えば、浮動小数点数の内部表現の特性により、非常に小さな値や大きな値の比較では、誤差が生じることがあります。
- JavaScriptでは、数値型は柔軟に扱われるため、これらの判定方法でも、特定のケースでは意図しない結果が生じる可能性があります。
JavaScriptにおける数値型判定のコード例
// 整数の例
let integerNum = 10;
if (Number.isInteger(integerNum)) {
console.log(integerNum + " is an integer.");
}
// 浮動小数点数の例
let floatNum = 3.14;
if (!Number.isInteger(floatNum)) {
console.log(floatNum + " is a float.");
}
// 整数の例
let integerNum = 5;
if (integerNum % 1 === 0) {
console.log(integerNum + " is an integer.");
}
// 浮動小数点数の例
let floatNum = 3.14;
if (floatNum % 1 !== 0) {
console.log(floatNum + " is a float.");
}
// 整数の例
let integerNum = 7;
if (integerNum === Math.floor(integerNum)) {
console.log(integerNum + " is an integer.");
}
// 浮動小数点数の例
let floatNum = 7.5;
if (floatNum !== Math.floor(floatNum)) {
console.log(floatNum + " is a float.");
}
これらのコード例では、それぞれ異なる方法で数値が整数かどうかを判定しています。
Math.floor()
関数は、数値を切り捨てた整数値と比較することで整数かどうかを判定します。- 剰余演算子は、数値を 1 で除算したときの剰余が 0 であれば整数であることを利用します。
Number.isInteger()
メソッドは、直接整数かどうかを判定します。
文字列変換と正規表現:
- 数値を文字列に変換し、正規表現を使用して整数または浮動小数点数のパターンにマッチするかを判定します。
let num = 3.14;
if (/^\d+$/.test(num.toString())) {
console.log("Number is an integer.");
} else if (/^\d+\.\d+$/.test(num.toString())) {
console.log("Number is a float.");
}
ビット演算:
- 数値を整数に変換し、ビットシフト演算を使用して整数かどうかを判定します。
let num = 3.14;
let intNum = parseInt(num);
if (intNum === num) {
console.log("Number is an integer.");
} else {
console.log("Number is a float.");
}
カスタム関数:
- 複数の判定方法を組み合わせて、より柔軟な判定を行うカスタム関数を作成します。
function isInteger(num) {
return Number.isInteger(num) && num % 1 === 0;
}
let num = 10;
if (isInteger(num)) {
console.log("Number is an integer.");
}
- カスタム関数を適切に設計することで、より柔軟な判定が可能となります。
- 正規表現やビット演算は、特定の条件や環境下でパフォーマンスが異なる場合があります。
- これらの代替方法は、特定のケースやパフォーマンス要件に合わせて選択することができます。
適切な方法の選択
- カスタム関数を活用することで、独自の判定ロジックを実装することができます。
- 特定の条件やパフォーマンス要件がある場合は、他の方法を検討してください。
- ほとんどの場合、
Number.isInteger()
メソッドが最もシンプルかつ効率的です。
javascript types numbers