web-dev-qa-db-fra.com

Comment vérifier si un nombre est évalué à l'infini?

J'ai une série de calculs Javascript qui (uniquement sous IE) montrent l'infini en fonction des choix de l'utilisateur.

Comment empêcher la Word Infinity d'apparaître et, par exemple, affiche-t-il 0.0

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

Vous pouvez éventuellement utiliser la fonction isFinite à la place, selon la manière dont vous souhaitez traiter NaN. isFinite renvoie false si votre numéro est POSITIVE_INFINITY, NEGATIVE_INFINITY ou NaN.

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

Un simple n === n+1 ou n === n/0 fonctionne:

function isInfinite(n) {
  return n === n/0;
}

Sachez que la isFinite() native coercule les entrées sur les nombres. isFinite([]) et isFinite(null) sont tous les deux true par exemple.

9
ryanve

Dans ES6, la méthode Number.isFinite() détermine si la valeur transmise est un nombre fini.

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

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

En fait, n === n + 1 fonctionnera pour les nombres supérieurs à 51 bits, par exemple.

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

Vous pouvez utiliser isFinite in window, isFinite(123):

Vous pouvez écrire une fonction comme:

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

Et utiliser comme:

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

Vous pouvez également Number.isFinite vérifier également si la valeur est numérique et est plus précise pour la vérification de undefined et null etc.

Ou vous pouvez polyfill c'est comme ça:

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