[javascript] 숫자가 무한대로 평가되는지 어떻게 확인합니까?

사용자 선택에 따라 무한대를 표시하는 일련의 Javascript 계산이 있습니다 (IE에서만).

Infinity예를 들어, 단어 표시를 중지하고 0.0대신 표시 하는 방법은 무엇입니까?



답변

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

. isFinite을 처리하려는 방법에 따라 대신 함수를 사용할 수 있습니다 NaN. 번호가 , 또는 인 경우를 isFinite반환 false합니다 .POSITIVE_INFINITYNEGATIVE_INFINITYNaN

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


답변

단순 n === n+1또는 n === n/0작동 :

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

네이티브 isFinite()는 숫자에 대한 입력을 강제합니다. isFinite([])그리고 isFinite(null)모두 true예를 들면.


답변

에서는 ES6상기 Number.isFinite()방법은 전달 된 값이 유한 수 있는지 여부를 판정한다.

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

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


답변

실제로 n === n + 1은 51 비트보다 큰 숫자에 대해 작동합니다.

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


답변

나는 가독성뿐만 아니라 다양한 방어 적 코딩 이유로 Lodash 를 사용하는 것을 좋아합니다 . ES6 은 훌륭하고 숫자가 아닌 값에 문제가 없지만 ES6이 가능하지 않다면 이미 lodash가 있거나 간단한 코드를 원합니다 : _.isFiniteNumber.isFinite

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

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


답변

값이 NaN또는 Infinity형식 인지 확인해야 하지만 유효한 결과로 문자열을 전달 해야하는 시나리오에 직면했습니다. 많은 텍스트 문자열이 false-positive를 생성 NaN하므로이를 우회하는 간단한 솔루션을 만들었습니다.

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

위의 코드는 값을 문자열로 변환하고 값이 NaN 또는 Infinity와 정확히 같은지 확인합니다 (음의 무한대에 대해 다른 대소 문자를 추가해야 함).

그래서:

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


답변

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값이 숫자인지 확인 undefined하고 확인하는 데 더 정확한 null등 을 확인할 수도 있습니다 .

또는 다음 과 같이 폴리 필 할 수 있습니다 .

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