如何检测给定的数字是否为整数?

29
如何测试变量是否包含数字并且是整数?
例如:
if (1.589 == integer) // false
if (2 == integer) // true
任何线索?

可能是重复的问题:如何在Javascript中检查变量是否为整数? - Artjom B.
8个回答

61
num % 1 === 0

这会先将num转换为Number类型,因此可以转换为整数的任何值都将通过测试(例如'42'true)。

如果您想排除这些值,还需要进行额外的检查。

typeof num === 'number'

你也可以使用parseInt()来实现这个功能,例如:

parseInt(num) == num

对于无类型检查和

parseInt(num) === num

需要进行类型检查,请注意这些测试不是等价的:通过使用 parseInt() 进行检查将首先转换为 String,因此例如 true 将不能通过检查。

还要注意,使用 parseInt() 进行未经类型检查的检查将正确处理十六进制字符串,但对于八进制数(即具有前导零的数字字符串)会失败,因为这些字符串被 parseInt() 识别而不被 Number() 识别。如果您需要处理具有前导零的十进制字符串,则必须指定基数参数。


11

这个可以工作:

if (Math.floor(x) == x)

5
您可以使用整数的正式定义:
Math.floor(x) === x

2

2
这个怎么样:
if((typeof(no)=='number') && (no.toString().indexOf('.')==-1))

1
这可能取决于您对整数的定义(以及用例)。 - bdukes
嗯。是的。对于固有的数学问题,我倾向于从数字而不是数字符号的角度来考虑它们 - 因此,我发表了上面的评论。 - Matt Ball
@MattBall 它也适用于 8.000。当您在该数字上调用 toString() 时,您会得到 '8'。演示:http://jsfiddle.net/Msyrh/ - Šime Vidas

2
这个行不行:

这个行不行:

if (parseInt(number, 10) == number)
{
  alert(number + " is an integer.");
}

1
您应该始终包含基数参数:parseInt(number, 10) - Greg
@Greg:不一定-有些人可能想要传递十六进制数;八进制将失败,因为它们被parseInt()识别但不被Number()识别。 - Christoph

0

你可以利用Java的解析能力,或者尝试使用模数运算符%...


-1

有一个名为isNaN(val)的JavaScript函数,如果val不是数字,则返回true。

如果您想将val用作数字,需要使用parseInt()或parseFloat()进行强制转换

编辑: 糟糕。根据评论中提到的错误进行更正


1
仅从函数名称来看,我会认为“isNaN”如果val“不是数字”,则返回true,这就是NaN的含义。打字错误? - Matt Ball
1
isNaN(val) 函数在 val 不是数字时返回 true,但对于非整数数字它同样返回 false,因此它无法解决这个问题。 - Amok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接