web-dev-qa-db-ja.com

数値が無限と評価されるかどうかを確認するにはどうすればよいですか?

(IEのみで)ユーザーの選択に応じてInfinityを示す一連のJavascript計算があります。

WordのInfinityの表示を停止して、たとえばshow 0.0代わりに?

84
Homer_J
if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY)
{
    // ...
}

isFiniteの扱い方によっては、代わりに NaN 関数を使用できます。 isFiniteは、番号がPOSITIVE_INFINITYNEGATIVE_INFINITYまたはfalseの場合、NaNを返します。

if (isFinite(result))
{
    // ...
}
161
LukeH

単純な_n === n+1_または_n === n/0_が機能します:

_function isInfinite(n) {
  return n === n/0;
}
_

ネイティブisFinite()は入力を数値に強制することに注意してください。 isFinite([])isFinite(null)は両方ともtrueです。

9
ryanve

_ES6_では、 Number.isFinite() メソッドは、渡された値が有限数かどうかを判断します。

_Number.isFinite(Infinity);  // false
Number.isFinite(NaN);       // false
Number.isFinite(-Infinity); // false

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true
_
5
zangw

実際には、n === n + 1は51ビットより大きい数値で機能します。

1e16 + 1 === 1e16; // true
1e16 === Infinity; // false
2
Yuri

ウィンドウでisFiniteを使用できます、isFinite(123)

次のような関数を書くことができます。

function isInfinite(num) {
 return !isFinite(num);
}

そして次のように使用します:

isInfinite(null); //false
isInfinite(1); //false
isInfinite(0); //false
isInfinite(0.00); //false
isInfinite(NaN); //true
isInfinite(-1.797693134862316E+308); //true
isInfinite(Infinity); //true
isInfinite(-Infinity); //true
isInfinite(+Infinity); //true
isInfinite(undefined); //true

あなたもすることができます Number.isFiniteは、値も数値であるかどうかをチェックし、undefinedおよびnullなどをチェックするためにより正確です。

または、polyfill次のようにできます:

Number.isFinite = Number.isFinite || function(value) {
  return typeof value === 'number' && isFinite(value);
}
0
Alireza