我在JavaScript中寻找一种简单的方法来检查一个数字是否有小数点(以确定它是否为整数)。例如,

23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}

当前回答

Number.isInteger(23);  // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false: 

Number.isInteger()是ES6标准的一部分,在IE11中不支持。

NaN, Infinity和非数字参数返回false,而x % 1 != 0返回true。

其他回答

Number.isSafeInteger(value);

在JavaScript中,isSafeInteger()是一个Number方法,用于返回一个布尔值,指示一个值是否为安全整数。这意味着它是一个整数值,可以精确地表示为IEEE-754双精度数,而不需要舍入。

//如何字节化它?

Number.prototype.isInt= function(){
 return this== this>> 0;
}

我总是觉得javascript中的位操作符很糟糕

他们几乎不锻炼。

可以使用不改变值的位操作(^ 0或~~)来丢弃小数部分,小数部分可用于舍入。四舍五入后,将其与原始值进行比较:

function isDecimal(num) {
  return (num ^ 0) !== num;
}

console.log( isDecimal(1) ); // false
console.log( isDecimal(1.5) ); // true
console.log( isDecimal(-0.5) ); // true

使用模可以工作:

num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5

请注意,这是基于数字的数值,而不考虑格式。它将包含固定小数点的整数的数值字符串视为整数:

'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5

当使用带有十进制步骤的计数器时,检查number是否为整数实际上会失败,如下所示。因此,用小数点后9位(可能更多)来格式化数字可能是最安全的(尽管速度较慢),如果它以9个零结尾,那么它就是一个整数。

const isRound = number => number. tofixed (9).endsWith('000000000'); For (let counter = 0;Counter < 2;计数器+= 0.1){ console.log({counter, modulo: counter % 1,格式化:counter. tofixed (9), isRound: isRound(counter)}); }