如何发现一个数字是浮点数或整数?
1.25 --> float
1 --> integer
0 --> integer
0.25 --> float
如何发现一个数字是浮点数或整数?
1.25 --> float
1 --> integer
0 --> integer
0.25 --> float
当前回答
在这里尝试了一些答案,我最终写出了这个解决方案。这也适用于字符串中的数字。
function isInt(number) {
if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
return !(number - parseInt(number));
}
function isFloat(number) {
if(!/^["|']{0,1}[-]{0,1}\d{0,}(\.{0,1}\d+)["|']{0,1}$/.test(number)) return false;
return number - parseInt(number) ? true : false;
}
var测试={“integer”:1,“浮动”:1.1,“整数InString”:“5”,“floatInString”:“5.5”,“负Int”:-345,“负浮动”:-34.98,“negativeIntString”:“-45”,“negativeFloatString”:“-23.09”,“notValidFalse”:false,“notValidTrue”:true,“notValidString”:“45lorem”,“notValidStringFloat”:“4.5lorem”,'notValidNan':NaN,“notValidObj”:{},“notValidArr”:[1,2],};函数isInt(数字){如果(!/^[“|']{0,1}[-]{0.1}\d{0,}(\.{0,1}\d+)[“|']{0 1}$/.test(数字))返回false;回来(number-parseInt(number));}函数isFloat(数字){如果(!/^[“|']{0,1}[-]{0.1}\d{0,}(\.{0,1}\d+)[“|']{0 1}$/.test(数字))返回false;返回number-parseInt(number)?真:假;}函数测试函数(obj){var keys=对象.keys(obj);var values=对象.值(obj);values.forEach(函数(元素,索引){console.log(`${keys[index]}(${element})var是整数吗${isInt(元素)}`);console.log(`${keys[index]}(${element})var是浮点数吗${isFloat(元素)}`);});}testFunctions(测试);
其他回答
另一种方法是:
function isFloat(float) {
return /\./.test(float.toString());
}
可能没有其他方法有效,但另一种方法仍然有效。
这可能不如%answer的性能好,它可以防止您首先转换为字符串,但我还没有看到任何人发布它,所以这里有另一个选项应该可以正常工作:
function isInteger(num) {
return num.toString().indexOf('.') === -1;
}
const integerCheck = (num) => {
const isInt = (n) => Number(n) === n && n % 1 === 0
const isFloat = (n) => Number(n) === n && n % 1 !== 0
return (isInt(num) || !isFloat(num))
}
console.log( integerCheck('23.3') );
它真的不必那么复杂。整数的parseFloat()和parseInt()等价物的数值将相同。因此,您可以这样做:
function isInt(value){
return (parseFloat(value) == parseInt(value)) && !isNaN(value);
}
Then
if (isInt(x)) // do work
这也将允许字符串检查,因此并不严格。如果想要一个强类型的解决方案(也就是,不使用字符串):
function is_int(value){ return !isNaN(parseInt(value * 1) }
当除以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脚本2015中被标准化。这个答案涵盖了这个解决方案。