100 votes

Comment vérifier si un nombre s'évalue à l'infini ?

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

Comment arrêter le mot Infinity apparaissant et par exemple, montrer 0.0 à la place ?

0voto

cale_b Points 5864

J'aime utiliser Lodash pour une variété de codage défensif ainsi que pour des raisons de lisibilité. ES6 Number.isFinite est excellent et ne pose pas de problèmes avec les valeurs non numériques, mais si ES6 n'est pas possible, vous avez déjà lodash, ou vous voulez un code plus court : _.isFinite

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

_.isFinite(null); // false
_.isFinite(3); // true
_.isFinite('3'); // true

-1voto

dmitrizzle Points 582

J'ai rencontré un scénario qui m'obligeait à vérifier si la valeur était de type NaN o Infinity mais transmettent des chaînes de caractères comme résultats valides. Parce que de nombreuses chaînes de texte produiront des résultats faussement positifs. NaN J'ai trouvé une solution simple pour contourner ce problème :

  const testInput = input => input + "" === "NaN" || input + "" === "Infinity";

Le code ci-dessus convertit les valeurs en chaînes de caractères et vérifie si elles sont strictement égales à NaN ou Infini (vous devrez ajouter un autre cas pour l'infini négatif).

Donc :

testInput(1/0); // true
testInput(parseInt("String")); // true
testInput("String"); // false

-2voto

Alireza Points 40192

Vous pouvez utiliser isFinite dans la fenêtre, 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.isFinit e qui vérifie également si la valeur est aussi un nombre et est plus précis pour vérifier undefined y null etc...

Ou vous pouvez polyfill comme ça :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X