如何发现一个数字是浮点数或整数?

1.25 --> float  
1 --> integer  
0 --> integer  
0.25 --> float

当前回答

这是我的:

function isInt(quale) {
    var valore = $('#'+quale).val().toLowerCase();
    if (isNaN(Number(String(valore))) || (valore.indexOf("e") > 0)) {
        // Not int
    } else {
        // Is Int!
    }
}

还有这个:

function isFloat(quale) {
   var valore = $('#'+quale).val();
   valore = valore.replace(",", "");
   if (isNaN(String(valore)) || (valore.indexOf("e") > 0)) {
    // Not Float
   } else {
    // Float
   }
}

Ad majora!

其他回答

它真的不必那么复杂。整数的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) }

尝试这些函数来测试一个值是否是一个没有小数部分的数字基元值,并且在可以表示为精确整数的大小范围内。

function isFloat(n) {
    return n === +n && n !== (n|0);
}

function isInteger(n) {
    return n === +n && n === (n|0);
}

有一个名为Number.isInteger()的方法,它目前在除IE.MDN之外的所有浏览器中都实现了。MDN还为其他浏览器提供了一个polyfill:

Number.isInteger = Number.isInteger || function(value) {
  return typeof value === 'number' && 
    isFinite(value) && 
    Math.floor(value) === value;
};

但是,对于大多数使用情况,最好使用Number.isSafeInteger,它还可以检查值是否太高/太低,以至于任何小数点都会丢失。MDN也为此提供了一种聚菲。(您还需要上面的isInteger民意测验。)

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;
};

正如其他人提到的,你在JS中只有双打。那么,如何定义一个整数?只需检查舍入数字是否等于自身:

function isInteger(f) {
    return typeof(f)==="number" && Math.round(f) == f;
}
function isFloat(f) { return typeof(f)==="number" && !isInteger(f); }

可以使用简单的正则表达式:

function isInt(value) {

    var er = /^-?[0-9]+$/;

    return er.test(value);
}

或者,您也可以根据需要使用以下功能。它们由PHPJS项目开发。

is_int()=>检查变量类型是否为整数,其内容是否为整数

is_float()=>检查变量类型是否为float,其内容是否为floate

ctype_digit()=>检查变量类型是否为字符串,以及其内容是否只有小数位数

更新1

现在它也检查负数,感谢@ChrisBartley的评论!