如何检查一个数字是浮点数还是整数?

859

如何判断一个数字是float还是integer

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

53
我理解您的问题,但是为了明确:<nit-pick> JavaScript没有不同的整数和浮点数字类型。在JavaScript中每个数字都只是一个Number</nit-pick> - Matt Ball
5
根据您的理解,“无穷大”是整数还是非整数?这里的答案在这个问题上分布得相当均匀。 - Mike Samuel
14
为了数学上的准确性:由于无限大不是实数,而所有整数都是实数,因此“无穷大”不能被视为整数。 - rvighne
2
@rvighne,我认为我们都同意无穷大和NaN不是实数的事实意味着IEEE-754浮点数不是实数的子集。所有基于IEEE-754的数值分析都必须处理这个事实。我不明白的是你如何认为这个事实决定了is_integral在基数方面应该如何行事。就个人而言,我认为((x%1)==0)是一个很好的代理,并且已经被IEEE-754完全指定,因此没有必要争论不同数字线之间的对应关系。 - Mike Samuel
5
你认为 1.0 是整型还是浮点型? - vol7ron
显示剩余7条评论
52个回答

0
一个巧妙的解决方案是更新Number原型而不是创建一个函数,就像这样:
Number.prototype.integer = function() {
  return this % 1 === 0
}

Number.prototype.float = function() {
  return this % 1 !== 0
}

现在你可以在任何数值变量上调用这些方法,而不是将变量传递给函数。
let integerTest = 1
let floatTest = 0.5

integerTest.integer() // true
integerTest.float() // false

floatTest.integer() // false
floatTest.float() // true

大部分只是个人喜好,但我喜欢它!

0
这是我的代码。它检查字符串是否为空(否则将通过)并将其转换为数字格式。现在,根据您是否希望'1.1'等于1.1,这可能是你要找的,也可能不是。
var isFloat = function(n) {
    n = n.length > 0 ? Number(n) : false;
    return (n === parseFloat(n));
};
var isInteger = function(n) {
    n = n.length > 0 ? Number(n) : false;
    return (n === parseInt(n));
};

var isNumeric = function(n){

   if(isInteger(n) || isFloat(n)){
        return true;
   }
   return false;

};

0

浮点数验证条件:

if (lnk.value == +lnk.value && lnk.value != (lnk.value | 0)) 

整数验证的条件:

if (lnk.value == +lnk.value && lnk.value == (lnk.value | 0)) 

希望这可能会有所帮助。


0

这可能不如 % 答案高效,因为它可以避免您首先转换为字符串,但我还没有看到有人发布过它,所以这是另一个应该可以正常工作的选项:

function isInteger(num) {
    return num.toString().indexOf('.') === -1;
}

我认为这是一个好的方法。 - S Panfilov
我想补充一下,ES6中的includes()方法使得这个答案变得更加简单。 - Axle

0

这是我的:

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

迈向更高境界!


0

根据我在这里看到的一切,我已经创建了自己的一套函数来测试我所需要的东西:

function NumberValidator() {
this.isFloat = function (n) {
    return typeof(n)==="number" && n === +n && Math.round(n) !== n;
};

this.isInteger = function (n) {
    return typeof(n)==="number" && n === +n && Math.round(n) === n;
};

this.isFloatOrInteger = function (n) {
    return this.isFloat(n) || this.isInteger(n);
};

this.isNonZeroFloatOrInteger = function (n) {
    return this.isFloatOrInteger(n) && n > 0;
};

this.isNonZeroInteger = function (n) {
    return this.isInteger(n) && n > 0;
};
}

然而,shime的解决方案更短且检查较少,因此可能更好。


0
以下函数可防止空字符串、未定义、空值和最大/最小值范围。JavaScript 引擎应该从一开始就内置这些函数。 :)
享受吧!
function IsInteger(iVal) {
    var iParsedVal; //our internal converted int value


    iParsedVal = parseInt(iVal,10);

    if (isNaN(iParsedVal) || Infinity == iParsedVal || -Infinity == iParsedVal) //sanity check - guard against empty strings and max/min values
        return false;
    else
        return Number(iVal) === (iParsedVal | 0); //the 2nd operand group (intValue | 0), evaluates to true only if the intValue is an integer; so an int type will only return true
}

function IsFloat(fVal) {
    var fParsedVal; //our internal converted float value


    fParsedVal = parseFloat(fVal);

    if (isNaN(fParsedVal) || Infinity == fParsedVal || -Infinity == fParsedVal) //sanity check - guard against empty strings and max/min values
        return false;
    else
        return !!(fVal % 1); //true only if there is a fractional value after the mod op; the !! returns the opposite value of the op which reflects the function's return value
}

2
isFloat(1.0) => false - Tadas T

0

我需要检查一个输入值是整数还是浮点数,为此我想出了以下方法:

function isInteger(x) {
  var integer = parseInt(x, 10);
  if (!isNaN(integer) && !isFloat(x)) {
    return true;
  }
  return false;
}

function isFloat(x) {
  var f = parseFloat(x);
  var floor = Math.floor(f);
  var fraction = f - floor;
  if (fraction > 0) {
    return true;
  }
  return false;
}

var cases = [
  "1",
  "1.00",
  "1.01",
  "0.05",
  "ab1",
  "ab1.1",
  1,
  1.00,
  1.01,
  0.05,
  1e+5,
  "",
  true,
  false,
  null,
  NaN,
  undefined,
];

console.log("isInteger()");
for (var i = 0; i < cases.length; i++) {
  console.log(cases[i], isInteger(cases[i]));
}

console.log("\nisFloat()");
for (var i = 0; i < cases.length; i++) {
  console.log(cases[i], isFloat(cases[i]));
}


0

我知道已经有30个答案了,但一个复杂的方法是这样做:

function isInteger(n) {
    return n.toString().split('.').length === 1;
}

解释:我们首先将 n 转换为字符串,并根据点进行分割。如果 n 是一个浮点数,例如 4.5,那么 split 将返回一个数组 ['4', '5']。如果它是一个整数,比如 45,它将返回 ['45']。因此,如果数组的长度为 1,则我们知道它是一个数字。
附言:如果您想以新的 ES6 格式(箭头函数)编写此函数:
const isInteger = n => n.toString().split('.').length === 1;

0

这是我能想到的最佳解决方案,用于检查浮点数和整数。

function isFloat(n) {
  if (!n) {
    return false
  }
  return !isNaN(n % 1) && n % 1 !== 0;
}

function isInt(n) {
  if (n.length==0) {
    return false
  }
  return !isNaN(n % 1) && n % 1 == 0;
}


2
这意味着 0 不是一个整数。 - Quentin
我更新了一个整数的空值条件。现在它不会在零时返回false。感谢您的纠正。 - zernab hussain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接