如何检查数字是否评估为无穷大?

时间:2011-01-18 13:24:36

标签: javascript infinity

我有一系列的Javascript计算(仅在IE下)根据用户的选择显示Infinity。

如何停止显示Infinity字样,例如显示0.0

8 个答案:

答案 0 :(得分:160)

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

您可以使用isFinite功能,具体取决于您希望如何处理NaN。如果您的号码为isFinitefalsePOSITIVE_INFINITY,则NEGATIVE_INFINITY会返回NaN

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

答案 1 :(得分:9)

简单的n === n+1n === n/0有效:

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

请注意原生isFinite()强制输入数字。例如,isFinite([])isFinite(null)都是true

答案 2 :(得分:5)

ES6中,Number.isFinite()方法确定传递的值是否为有限数。

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

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

答案 3 :(得分:2)

实际上n === n + 1适用于大于51位的数字,例如

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

答案 4 :(得分:0)

您可以在窗口isFinite(123)中使用 isFinite

您可以编写如下函数:

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检查该值是否也是数字,并且更准确地检查undefinednull等等。

或者你可以像这样 polyfill

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

答案 5 :(得分:0)

我遇到了一种情况,要求我检查该值是NaN还是Infinity类型,但是将字符串作为有效结果传递。因为许多文本字符串都会产生假阳性NaN,所以我提出了一种简单的解决方案来规避该问题:

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

上面的代码将值转换为字符串,并检查它们是否严格等于NaN或Infinity(您需要为负无穷添加另一种情况)。

所以:

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

答案 6 :(得分:0)

出于各种防御性编码原因和可读性,我喜欢使用Lodash。 ES6 Number.isFinite很不错,并且非数字值没有问题,但是如果ES6不可能,则您已经有了破折号,或者想要使用简短的代码:_.isFinite

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

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

答案 7 :(得分:0)

执行简单的 ol' 比较:

(number === Infinity || number === -Infinity)

或保存多个字符:

Math.abs(number) === Infinity

为什么要使用这个

  1. !(Number.isFinite(number)) 中断 NaN 输入。
  2. Number.POSITIVE_INFINITYNumber.NEGATIVE_INFINITY 可以重新定义;他们是configurable
  3. Infinity-Infinitythe strict mode 中是只读的。
  4. 这是最短的解决方案。