【问题标题】:Is there a more efficient or generally better way to determine if a number is an integer than this?有没有比这更有效或更好的方法来确定一个数字是否为整数?
【发布时间】:2016-10-20 20:30:00
【问题描述】:

现在我正在使用这个函数来确定一个数字是否为整数:

function isInteger(input){
    return (input%1==0);
}

有没有更有效的方法来做到这一点?我知道有一个内置的 javascript 函数,但它在某些 IE 版本中不起作用。

【问题讨论】:

  • 这里有一个更有效的方法:link
  • 也许你想用return typeof input === 'number',IE支持check MDN
  • @VitaliiSrimbanu 一个数字不一定是整数,比如看3.14
  • @vlaz 感谢您指出这一点,我的错。

标签: javascript integer


【解决方案1】:

根据jsPerf~~ (repeated bitwise NOT) 和<< 0(左移 0 位)在我的浏览器中速度更快:

function isInteger(input) {
  return (~~input === input);
}

function isInteger2(input) {
  return (input << 0 === input);
}

警告:JavaScript 位运算符将其操作数强制为signed 32-bit integers,因此此方法仅对Math.pow(2, 31) -1 (2147483647) 以下的数字安全。如果不能保证,请使用其他方法。

在其他方法中,n % 1 === 0Math.floor(value) === value 慢 40-50%,Number.isInteger 远远落后。

但是,它们都“相当快”。除非您必须检查 很多 数字,否则这些方法都不会成为您应用程序的瓶颈。

【讨论】:

  • BITWISE NOT 很危险!按位数算术将任何数视为 32bit,因此对于大数,您将得到溢出~~10000000000// 1410065408
【解决方案2】:
function isInteger(input){
    Number.isInteger(input)
}

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

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

【讨论】:

    【解决方案3】:
    function isInt(val) {
        return val + 0 === val;
    }
    

    【讨论】:

    • 但是1.5 + 0 === 1.5
    猜你喜欢
    • 1970-01-01
    • 2018-06-29
    • 2016-02-04
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多