Question

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

Comment peut-on arrêter le mot Infinity apparaissant et par exemple, montrent 0.0 à la place?

Était-ce utile?

La solution

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

Vous pourriez éventuellement utiliser la fonction isFinite à la place, selon la façon dont vous voulez traiter NaN . retourne isFinite false si votre numéro est POSITIVE_INFINITY, NEGATIVE_INFINITY ou NaN.

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

Autres conseils

A n === n+1 simples ou œuvres n === n/0:

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

Sachez que les entrées natives isFinite() des nombres à contraint. isFinite([]) et isFinite(null) sont à la fois true par exemple.

En ES6, Number.isFinite() procédé 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

En fait n === n + 1 va travailler pour un nombre plus grand que 51 bits, par exemple.

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

Je l'ai rencontré un scénario qui m'a obligé de vérifier si la valeur est du type NaN ou Infinity mais passer des chaînes comme des résultats valides. Parce que beaucoup de chaînes de texte produiront NaN faux positifs, je l'ai fait une solution simple à contourner que:

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

Les convertis de code ci-dessus des valeurs aux chaînes et vérifie si elles sont strictement égal à NaN ou Infinity (vous aurez besoin d'ajouter un autre cas pour l'infini).

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

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

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

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

Vous pouvez utiliser isFinite dans la fenêtre, isFinite(123):

Vous pouvez écrire une fonction comme:

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

Et l'utilisation 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 qui vérifie également si la valeur est le numéro trop et est plus précis pour le contrôle undefined et null etc ...

Ou vous pouvez polyfill comme ceci:

Number.isFinite = Number.isFinite || function(value) {
  return typeof value === 'number' && isFinite(value);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top