整数型(整数)は、多くの場合、JavaScriptにいくつかの奇妙な問題を引き起こします。 ECMAScriptの仕様では、それらは概念にのみ存在します。
すべての数値は浮動小数点番号であり、整数は小数のない数字のセットを持っていません。
このブログでは、値が整数であるかどうかを確認する方法を説明します。
ECMAScript 5
ES5で使用できる多くの方法があります。時々、独自の方法を使用することもあります:Isinteger(x)の関数は、整数である場合にtrueを返す、そうでなければFalseを返します。
いくつかの例を見てみましょう。
残りのチェックに合格します
残りの操作(%)を使用して、残りを1で計算して、残りが0であるかどうかを確認できます。
関数isinteger(x){return x%1 === 0;}この方法は非常にシンプルで効果的だからです。
> isinteger(17)true> isinteger(17.13)false
結果は最初の数字の兆候に依存するため、残りの操作を操作するときは注意する必要があります。それが肯定的である場合、結果は肯定的です。それ以外の場合はネガティブです。
> 3.5%10.5> -3.5%1-0.5
次に、0をチェックすることもできますが、これは実際には問題ではありません。しかし、問題は次のとおりです。この方法は、非桁の場合もtrueを返します。これは、%が数値に変換されるためです。
> isinteger( '')true> isinteger( '33')true> isinteger(false)true> isinteger(true)true
単純なタイプチェックで解決できます。
関数isinteger(x){return(typeof x === 'number')&&(x%1 === 0);}Math.Round()によって、数値が丸みがあり、前の値と同じ値を持っている場合、それは整数です。 JavaScriptでは、math.round()を介して確認できます。
関数isinteger(x){return math.round(x)=== x;}この方法も良いです
> isinteger(17)true> isinteger(17.13)false
また、Math.Round()は常に数値を返し、===はタイプが同じ場合にのみtrueを返すため、非数値を判断することもできます。
> isinteger( '')false
コードをより明確にしたい場合は、タイプチェック(前のバージョンで行ったことです)を追加できます。さらに、math.floor()およびmath.ceil()はmath.round()のように動作できます。ビット操作を介してビットオペレーターをチェックすると、「丸め」の別の方法が提供されます。
関数isinteger(x){return(x | 0)=== x;}このソリューション(他のビット操作と同様)には、1つの欠点があります。32ビットを超える数値を処理できません。
> isinteger(math.pow(2、32))false
ParSeint()を介してParseInt()を確認すると、Math.round()に同様の方法が提供され、数値を整数に変換します。この方法が良い理由を見てみましょう。
関数isinteger(x){return parseint(x、10)=== x;}Math.Round()ソリューションと同様に、非数字のケースを処理できますが、すべての整数番号を正しく処理するわけではありません。
> isinteger(100000000000000000000000000)false
なぜ? parseint()は、整数を解析する前に、最初のパラメーターを文字列に解析することを強制します。したがって、この方法を使用して数値を整数に変換することは良い選択ではありません。
> parseint(1000000000000000000000000、10)1>文字列(100000000000000000000000) '1e+21'
上記のように、parseint()は '1e+21'を解析するときに1で処理を停止するため、Math.round()スローの追加の1。ecmascript6を返します。ES6は、数字を整数に変換する別の方法を提供します:math.trunc()。この関数は、数の分数部分を削除します。
> math.trunc(4.1)4> math.trunc(4.9)4> math.trunc(-4.1)-4> math.trunc(-4.9)-4
さらに、ecMascript6は、整数をチェックする些細なタスクに対処する必要はありません。これは、機能番号が組み込まれているためです。isinteger()。