我认为 isNaN 不适合我的情况。我想确保某个变量在验证时只包含整数。所以在我的情况下 -1.45 不应该被允许。应该允许/有效的值,例如 1、23、334。
问问题
43971 次
2 回答
25
第1部分:
您可以使用余数运算符来查找值是否为整数:
function isWholeNumber(value) {
if (value % 1 === 0) {
console.log(value + ' is a whole number');
} else {
console.log(value + ' is not a whole number');
}
}
// Display the result here
isWholeNumber(1.45);
isWholeNumber(23);
解释:
- 余数运算符返回一个操作数除以第二个操作数时剩下的余数。
- 例如,
1.45 % 1
退货0.44999999999999996
和23 % 1
退货0
。 - 所以,现在如果 a
value % 1 === 0
,那么我们可以说它value
是一个整数,否则不是。
第2部分:
在某些value
实际上不是 a 的情况下,此逻辑会失败number
,因为余数运算符 (%) 会将其操作数转换为如下数字:
function isWholeNumber(value) {
console.log(value % 1); //<--- result is always 0
if (value % 1 === 0) {
console.log(value + ' is a whole number');
} else {
console.log(value + ' is not a whole number');
}
}
// Display the result here
isWholeNumber('23');
isWholeNumber('');
isWholeNumber(true);
这会导致显示不正确的结果,例如空字符串和布尔值显示为整数。我们可以通过检查值的类型number
来解决这个问题,如下所示:
function isWholeNumber(value) {
if (typeof value === 'number' && value % 1 === 0) {
console.log(value + ' is a whole number');
} else {
console.log(value + ' is not a whole number');
}
}
// Display the result here
isWholeNumber(1.45);
isWholeNumber(24);
isWholeNumber('23');
isWholeNumber('');
isWholeNumber(true);
第 3 部分:
在ES6全局对象Number
中获得了一个新属性Number.isInteger(value)
。它检查是否value
是一个整数,如:
// Display the result here
console.log(Number.isInteger(1.45));
console.log(Number.isInteger(24));
console.log(Number.isInteger('23'));
console.log(Number.isInteger(''));
console.log(Number.isInteger(true));
我们可以将其与第 2 部分中修改后 isWholeNumber
的函数集成,例如:
function isWholeNumber(value) {
if (Number.isInteger(value)) {
console.log(value + ' is a whole number');
} else {
console.log(value + ' is not a whole number');
}
}
// Display the result here
isWholeNumber(1.45);
isWholeNumber(24);
isWholeNumber('23');
isWholeNumber('');
isWholeNumber(true);
于 2013-05-10T06:44:47.940 回答
5
isNaN()
是检查数字与否。它不会检查数字是否完整。
function isInt(n) {
return n % 1 === 0;
}
或者
if (number % 1 == 0) {
alert('Whole Number');
} else {
alert('Not a Whole Number');
}
于 2013-05-10T06:44:51.940 回答