【发布时间】:2010-11-22 08:08:29
【问题描述】:
我如何测试一个变量以确定它是否包含一个数字,并且它是一个整数?
例如
if (1.589 == integer) // false
if (2 == integer) // true
有什么线索吗?
【问题讨论】:
标签: javascript numbers
我如何测试一个变量以确定它是否包含一个数字,并且它是一个整数?
例如
if (1.589 == integer) // false
if (2 == integer) // true
有什么线索吗?
【问题讨论】:
标签: javascript numbers
num % 1 === 0
这将首先将num 转换为Number 类型,因此任何可以转换为整数的值都将通过测试(例如'42'、true)。
如果你想排除这些,另外检查
typeof num === 'number'
您也可以使用parseInt() 来执行此操作,即
parseInt(num) == num
对于无类型检查和
parseInt(num) === num
用于打字检查。
请注意,测试是不等价的:通过parseInt() 进行检查将首先转换为String,因此例如true 不会通过检查。
还请注意,通过parseInt() 进行的无类型检查将正确处理十六进制字符串,但对于八进制(即带前导零的数字字符串)将失败,因为parseInt() 识别但Number() 无法识别这些字符串。如果您需要处理带前导零的十进制字符串,则必须指定 radix 参数。
【讨论】:
有一个名为 isNaN(val) 的 JavaScript 函数,如果 val 不是数字,则返回 true。
如果要将 val 用作数字,则需要使用 parseInt() 或 parseFloat() 进行强制转换
编辑: 哎呀。更正了评论中提到的错误
【讨论】:
这个怎么样:
if((typeof(no)=='number') && (no.toString().indexOf('.')==-1))
【讨论】:
8.000。当您对该号码调用toString() 时,您将得到'8'。演示:jsfiddle.net/Msyrh
您可以使用 javas 解析功能,也可以尝试模运算符 %...
【讨论】:
这行不通:
if (parseInt(number, 10) == number)
{
alert(number + " is an integer.");
}
【讨论】:
parseInt() 识别,但不被 Number() 识别
这行得通:
if (Math.floor(x) == x)
【讨论】:
你可以使用整数的正式定义:
Math.floor(x) === x
【讨论】:
可以使用函数Number.isInteger()。它还负责检查该值是否为数字。
例如:
Number.isInteger(3) // true
Number.isInteger(3.1) // false
Number.isInteger('3') // false
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
【讨论】: