Как проверить, оценивается ли число до бесконечности? - PullRequest
83 голосов
/ 18 января 2011

У меня есть серия вычислений Javascript, которые (только под IE) показывают бесконечность в зависимости от выбора пользователя.

Как остановить отображение слова Infinity и, например, вместо него показать 0.0?

Ответы [ 5 ]

160 голосов
/ 18 января 2011
if (result == Number.POSITIVE_INFINITY || result == Number.NEGATIVE_INFINITY)
{
    // ...
}

Вместо этого вы можете использовать функцию isFinite, в зависимости от того, как вы хотите обработать NaN. isFinite возвращает false, если ваш номер POSITIVE_INFINITY, NEGATIVE_INFINITY или NaN.

if (isFinite(result))
{
    // ...
}
9 голосов
/ 16 декабря 2013

Работает простой n === n+1 или n === n/0:

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

Имейте в виду, что собственный isFinite() принудительно вводит ввод чисел.Например, isFinite([]) и isFinite(null) равны true.

5 голосов
/ 28 декабря 2015

В ES6, метод Number.isFinite() определяет, является ли переданное значение конечным числом.

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

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true
2 голосов
/ 19 января 2015

На самом деле n === n + 1 будет работать для чисел больше 51 бита, например

1e16 + 1 === 1e16; // true
1e16 === Infinity; // false
0 голосов
/ 31 мая 2018

Вы можете использовать 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.isFinit e, который также проверяет, является ли значение также числовым, и более точен для проверки undefined и null и т. Д.polyfill это так:

Number.isFinite = Number.isFinite || function(value) {
  return typeof value === 'number' && isFinite(value);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...