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

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个回答

3

其实并不需要这么复杂。一个整数的parseFloat()和parseInt()等价的数字值是相同的。因此,你可以像这样做:

function isInt(value){ 
    return (parseFloat(value) == parseInt(value)) && !isNaN(value);
}

那么

if (isInt(x)) // do work

这也允许进行字符串检查,因此不是严格的。如果需要强类型解决方案(即不适用于字符串):
function is_int(value){ return !isNaN(parseInt(value * 1) }

isInteger(12.0) 是真的 - django

2
这个解决方案对我很有用。
<html>
<body>
  <form method="post" action="#">
    <input type="text" id="number_id"/>
    <input type="submit" value="send"/>
  </form>
  <p id="message"></p>
  <script>
    var flt=document.getElementById("number_id").value;
    if(isNaN(flt)==false && Number.isInteger(flt)==false)
    {
     document.getElementById("message").innerHTML="the number_id is a float ";
    }
   else 
   {
     document.getElementById("message").innerHTML="the number_id is a Integer";
   }
  </script>
</body>
</html>

2
比较一下floor()函数的结果和ceil()函数的结果不一样。
const isFloat = v => !isNaN(v) && Math.floor(v) !== Math.ceil(v);

> isFloat(1)
= false

> isFloat(1.1)
= true

> isFloat(42)
= false

> isFloat(84.42)
= true

问题在于 isFloat("myString") 返回 true。 - Ben A. Hilleli
@BenA.Hilleli 感谢您告知我这个问题。我已经更新了答案,您能确认这是否解决了问题吗? - user20937717

2

这是检查整数和浮点数的最终代码

function isInt(n) { 
   if(typeof n == 'number' && Math.Round(n) % 1 == 0) {
       return true;
   } else {
       return false;
   }
} 

或者

function isInt(n) {   
   return typeof n == 'number' && Math.Round(n) % 1 == 0;   
}   

如果n恰好是数字,则此仅测试浮点数。 - hacklikecrack

2

试试这个

let n;
return (n = value % 1) !== 0 && !isNaN(n);

当返回值为false时,意味着输入值为浮点数或浮点字符串,否则输入值为整数数或整数字符串。

基本上需要检查精度值是否不等于零。

另一个是检查正确的字符串数字。


评论:欢迎来到Stack Overflow!虽然您的答案在技术上可能是正确的,但我没有看到它与其他答案有实质性的不同。因此,在这种情况下,我投票删除它。 - timur

2
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') );

我不理解这里的设计哲学。完全没有必要使用lambda表达式。你还在做很多冗余计算。这里有其他48个答案,那么这个答案与其他答案有何不同之处呢? - General Grievance

1

对于整数,我使用这个

function integer_or_null(value) {
    if ((undefined === value) || (null === value)) {
        return null;
    }
    if(value % 1 != 0) {
        return null;
    }
    return value;
}

1
try this one
function amountcheck()
    {
        var dpamt=$('#dpamt').val()/5000;
        var ints=dpamt.toString();
        var isint=ints.split('.');
        if(isint[1]>0)
        {
            alert('float value');
            return false;
        }
        else
        {   
            alert('int value');
        }
    }

1

YourJS提供了以下两个函数,适用于所有数字,包括返回false-InfinityInfinity

function isFloat(x) {
  return typeOf(x, 'Number') && !!(x % 1);
}

function isInt(x) {
  return typeOf(x, 'Number') && x % 1 == 0;
}

由于typeOf()是YourJS内部函数,如果您想使用这些定义,您可以在此处下载仅包含这些函数的版本:http://yourjs.com/snippets/build/34


1
有时候,数字对象不允许您直接使用模运算符(%),如果您遇到这种情况,可以使用此解决方案。
if(object instanceof Number ){
   if( ((Number) object).doubleValue() % 1 == 0 ){
      //your object is an integer
   }
   else{
      //your object is a double
   }
}

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