106

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

如何停止单词Infinity出现,例如,0.0改为显示?

4

8 回答 8

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

您可以改用该isFinite功能,具体取决于您要如何对待NaN. 如果您的号码是或,则isFinite返回。falsePOSITIVE_INFINITYNEGATIVE_INFINITYNaN

if (isFinite(result))
{
    // ...
}
于 2011-01-18T13:27:30.683 回答
14

ES6,该Number.isFinite()方法判断传递的值是否为有限数。

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

Number.isFinite(0);         // true
Number.isFinite(2e64);      // true
于 2015-12-28T07:56:05.853 回答
10

一个简单的n === n+1orn === n/0作品:

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

请注意,本机isFinite()强制输入数字。isFinite([])并且isFinite(null)都是true例如。

于 2013-12-16T10:06:05.657 回答
2

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

1e16 + 1 === 1e16; // true
1e16 === Infinity; // false
于 2015-01-19T13:50:12.163 回答
2

执行简单的 ol' 比较:

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

或保存几个字符:

Math.abs(number) === Infinity

为什么要使用这个

  1. !(Number.isFinite(number))输入中断NaN
  2. Number.POSITIVE_INFINITY并且Number.NEGATIVE_INFINITY可以重新定义;它们是可配置的。
  3. Infinity并且严格模式下-Infinity是只读的。
  4. 这是最短的解决方案。
于 2021-05-14T21:35:40.163 回答
0

出于各种防御性编码原因以及可读性,我喜欢使用Lodash 。ES6很棒,并且没有非数字值的问题,但是如果 ES6 不可行,你已经有了 lodash,或者想要更简洁的代码: _. isFiniteNumber.isFinite

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

_.isFinite(null); // false
_.isFinite(3); // true
_.isFinite('3'); // true
于 2019-09-30T23:46:29.027 回答
-1

我遇到了一种情况,要求我检查值是否为NaNorInfinity类型,但将字符串作为有效结果传递。因为许多文本字符串会产生 false-positive NaN,所以我做了一个简单的解决方案来规避它:

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

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

所以:

testInput(1/0); // true
testInput(parseInt("String")); // true
testInput("String"); // false
于 2019-09-30T21:37:37.047 回答
-2

您可以在窗口中使用isFiniteisFinite(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);
}
于 2018-05-31T14:37:37.557 回答