【问题标题】:How to detect if a given number is an integer?如何检测给定数字是否为整数?
【发布时间】:2010-11-22 08:08:29
【问题描述】:

我如何测试一个变量以确定它是否包含一个数字,并且它是一个整数?

例如

if (1.589 == integer) // false
if (2 == integer) // true

有什么线索吗?

【问题讨论】:

标签: javascript numbers


【解决方案1】:
num % 1 === 0

这将首先将num 转换为Number 类型,因此任何可以转换为整数的值都将通过测试(例如'42'true)。

如果你想排除这些,另外检查

typeof num === 'number'

您也可以使用parseInt() 来执行此操作,即

parseInt(num) == num

对于无类型检查和

parseInt(num) === num

用于打字检查。

请注意,测试是不等价的:通过parseInt() 进行检查将首先转换为String,因此例如true 不会通过检查。

还请注意,通过parseInt() 进行的无类型检查将正确处理十六进制字符串,但对于八进制(即带前导零的数字字符串)将失败,因为parseInt() 识别但Number() 无法识别这些字符串。如果您需要处理带前导零的十进制字符串,则必须指定 radix 参数。

【讨论】:

    【解决方案2】:

    有一个名为 isNaN(val) 的 JavaScript 函数,如果 val 不是数字,则返回 true。

    如果要将 val 用作数字,则需要使用 parseInt() 或 parseFloat() 进行强制转换

    编辑: 哎呀。更正了评论中提到的错误

    【讨论】:

    • 仅从函数的名称来看,如果 val "is Not a Number"(NaN 代表什么),我认为 "isNaN" 会返回 true。错字?
    • isNaN(val) 如果 val 不是数字则返回 true,但对于非整数也返回 false,因此无法解决问题。
    【解决方案3】:

    这个怎么样:

    if((typeof(no)=='number') && (no.toString().indexOf('.')==-1))
    

    【讨论】:

    • 这可能取决于您对整数的定义(和用例)
    • 嗯。真的。对于固有的数学问题,我倾向于用数字而不是数字来考虑它们 - 因此,我在上面的评论。
    • @MattBall 它也适用于8.000。当您对该号码调用toString() 时,您将得到'8'。演示:jsfiddle.net/Msyrh
    【解决方案4】:

    您可以使用 javas 解析功能,也可以尝试模运算符 %...

    【讨论】:

      【解决方案5】:

      这行不通:

      if (parseInt(number, 10) == number)
      {
        alert(number + " is an integer.");
      }
      

      【讨论】:

      • 您应该始终包含基数参数:parseInt(number, 10)
      • @Greg:不一定——可能希望十六进制通过;八进制将失败,因为它们被 parseInt() 识别,但不被 Number() 识别
      【解决方案6】:

      这行得通:

      if (Math.floor(x) == x)
      

      【讨论】:

        【解决方案7】:

        你可以使用整数的正式定义:

        Math.floor(x) === x
        

        【讨论】:

          【解决方案8】:

          可以使用函数Number.isInteger()。它还负责检查该值是否为数字。

          例如:

          Number.isInteger(3)     // true
          Number.isInteger(3.1)   // false
          Number.isInteger('3')   // false
          

          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-04-05
            • 1970-01-01
            • 1970-01-01
            • 2014-04-25
            • 2016-08-22
            • 2023-03-29
            • 1970-01-01
            相关资源
            最近更新 更多