如何判断一个数字是float
还是integer
?
1.25 --> float
1 --> integer
0 --> integer
0.25 --> float
如何判断一个数字是float
还是integer
?
1.25 --> float
1 --> integer
0 --> integer
0.25 --> float
当除以1时检查余数:
function isInt(n) {
return n % 1 === 0;
}
如果您不知道参数是一个数字,则需要进行两个测试:
function isInt(n){
return Number(n) === n && n % 1 === 0;
}
function isFloat(n){
return Number(n) === n && n % 1 !== 0;
}
2019年更新 这个答案编写后5年,ECMA Script 2015中已经标准化了一个解决方案。该解决方案在此答案中介绍。
true
、false
、null
、空数组、一个包含单个整数的数组、以及包含表示整数字符串的数组等内容的真值。 - Dagg Nabbit""
和1.0
。isInt("");
和isInt(1.0);
都会得出true
的结果,请参见此演示http://jsbin.com/elohuq/1/edit - GajendraSinghPariharfunction last (array) { return array[array.length - 1]; }
,那么这个答案是否“完全错误”或者是“SO上最差的答案”,因为它没有先检查参数是否为数组?是的,检查参数是一个好习惯,但这应该是开发者的责任。SO的答案应该简短并且直接回答问题,尽可能清晰明了。 - M Miller有一种方法叫做Number.isInteger()
,目前在除IE外的所有浏览器中都已实现。MDN也为其他浏览器提供了一个polyfill:
Number.isInteger = Number.isInteger || function(value) {
return typeof value === 'number' &&
isFinite(value) &&
Math.floor(value) === value;
};
然而,在大多数情况下,最好使用Number.isSafeInteger
,它还会检查值是否过高/过低以至于任何小数位都将被丢失。 MDN也提供了相应的polyfil。(你还需要上面提到的isInteger
polyfill。)
if (!Number.MAX_SAFE_INTEGER) {
Number.MAX_SAFE_INTEGER = 9007199254740991; // Math.pow(2, 53) - 1;
}
Number.isSafeInteger = Number.isSafeInteger || function (value) {
return Number.isInteger(value) && Math.abs(value) <= Number.MAX_SAFE_INTEGER;
};
Number.isInteger(12.0) //true
(Chrome, Feb '17)可以翻译为:判断一个数是否为整数
Number.isInteger(12.0) //true` (在 Chrome,2017年2月)返回结果为真。 - S Panfilov12.0 ∈ ℤ
. - Константин ВанNumber.isInteger
的正确填充。然而,它是 Number.isSafeInteger
的正确填充。Number.isInteger
不应该检查数字是否为“安全整数”。请参见 MDN:isInteger 和 isSafeInteger。 - nunocastromartins试用这些函数来测试一个值是否为数字原始值,且没有小数部分,并且在可表示为精确整数的大小限制之内。
function isFloat(n) {
return n === +n && n !== (n|0);
}
function isInteger(n) {
return n === +n && n === (n|0);
}
n===+n
来检查数字,使用n|0
来四舍五入),但内置操作符也很奇特。 - ClaudiuparseFloat()
函数。 - Pointy|
或“或”)只能用于带符号的32位整数。但是,本文没有说明目标是否是要检查带符号的int32值。因此,这种方法不能用于超出范围的数字。例如 isInteger(5000000000)
将返回 false
,这是错误的! - Onur Yıldırım为什么不使用这样的代码:
var isInt = function(n) { return parseInt(n) === n };
你可以使用一个简单的正则表达式:
function isInt(value) {
var er = /^-?[0-9]+$/;
return er.test(value);
}
或者您也可以根据自己的需要使用以下函数,它们是由PHPJS项目开发的。
is_int()
=> 检查变量类型是否为整数并且其内容是否为整数
is_float()
=> 检查变量类型是否为浮点型并且其内容是否为浮点型
ctype_digit()
=> 检查变量类型是否为字符串并且其内容是否仅包含十进制数字
更新1
现在它也可以检查负数了,感谢@ChrisBartley的评论!
/^[0-9]+$/.test(String(value))
的意思是检查一个值是否为纯数字。 - tothemariotest()
返回一个布尔值,因此不需要三元运算符。这个应该可以:return /^-?\d+$/.test(String(value));
- Chris Bartleyfunction isInteger(x) { return typeof x === "number" && isFinite(x) && Math.floor(x) === x; }
function isFloat(x) { return !!(x % 1); }
// give it a spin
isInteger(1.0); // true
isFloat(1.0); // false
isFloat(1.2); // true
isInteger(1.2); // false
isFloat(1); // false
isInteger(1); // true
isFloat(2e+2); // false
isInteger(2e+2); // true
isFloat('1'); // false
isInteger('1'); // false
isFloat(NaN); // false
isInteger(NaN); // false
isFloat(null); // false
isInteger(null); // false
isFloat(undefined); // false
isInteger(undefined); // false
1.2
。始终使用 0.1、0.2 和 0.3 测试数字函数。 - Lukas Liesis以下是高效的函数,用于检查一个值是否为数字或者能够安全转换为数字:
function isNumber(value) {
if ((undefined === value) || (null === value)) {
return false;
}
if (typeof value == 'number') {
return true;
}
return !isNaN(value - 0);
}
对于整数(如果值为浮点数则返回 false):
function isInteger(value) {
if ((undefined === value) || (null === value)) {
return false;
}
return value % 1 == 0;
}
这里的效率在于当值已经是数字时,避免了使用parseInt(或parseNumber)。两个解析函数总是先将其转换为字符串,然后再尝试解析该字符串,如果该值已经是数字,则会浪费时间。
感谢其他帖子在此提供了进一步的优化思路!
function isInt(n)
{
return n != "" && !isNaN(n) && Math.round(n) == n;
}
function isFloat(n){
return n != "" && !isNaN(n) && Math.round(n) != n;
}
适用于所有情况。
isInt('1')
返回预期的 true
(至少对我来说是如此)。但是足够奇怪的是,isInt([5])
也返回 true
。这对我来说无关紧要,但对你可能有影响,所以请注意。 - acdcjunior2022更新 - 我们可以简单地使用Number的方法。
检查整数或浮点数:
Number.isFinite(val)
检查整数:
Number.isInteger(val)
检查浮点数(非整数):
!Number.isInteger(val) && Number.isFinite(val)
isFloat(num) {
return typeof num === "number" && !Number.isInteger(num);
}
console.log(isFloat(1.0));
结果为 false。 - fabpicoisFloat(NaN)
和 isFloat(Infinity)
返回 true :/ - piecioshka
<nit-pick>
JavaScript没有不同的整数和浮点数字类型。在JavaScript中每个数字都只是一个Number
。</nit-pick>
- Matt Ball1.0
是整型还是浮点型? - vol7ron