检查数字是否有小数位数/是整数

Han*_*ans 253 javascript validation integer numbers

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

23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
Run Code Online (Sandbox Code Playgroud)
if(number is integer) {...}
Run Code Online (Sandbox Code Playgroud)

And*_*y E 741

使用模数将起作用:

num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
Run Code Online (Sandbox Code Playgroud)

请注意,这是基于数字的数量,不论格式.它处理包含整数的数字字符串,其固定小数点与整数相同:

'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
Run Code Online (Sandbox Code Playgroud)

  • 我没有投票,但我会说它与20.0有关,还有小数点并满足上述要求.无论如何,来自我的+1教我新的东西:) (9认同)
  • @Abe:真的,但我认为这不太可能.如果`20.0`以编程方式具有小数点是不可能的,除非它表示为字符串.此外,没有其他解决方案因为没有解决这个问题而获得投票;-) (6认同)
  • OP要求检查**NUMBER**是否为整数.他没有提到**字符串** - 在这方面,安迪的答案是正确的. (3认同)
  • @Swanidhi:你什么意思?什么是无效的?`"10."`是一个整数,结果与"10"或"10"完全相同. (2认同)

le_*_*e_m 48

Number.isInteger(23);  // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false: 
Run Code Online (Sandbox Code Playgroud)

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

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

  • 12.0 的解决方案失败 (7认同)
  • @dYale这是因为 JavaScript 中的 `2.000000000000000000001 === 2` (7认同)
  • @VikasArora 不,它按预期工作。`Number.isInteger(12.0)` 返回 `true`。 (4认同)
  • 如果小数位数太多,这将不起作用: `Number.isInteger(2.000000000000000000001)` // true (2认同)

小智 46

或者您可以使用它来确定它是否不是小数:

string.indexOf(".") == -1;
Run Code Online (Sandbox Code Playgroud)

  • 这种方法在某些国家不起作用 (17认同)
  • 在继续之前转换为字符串.. ie:`yournumber.toString.indexOf(".")` (4认同)
  • 如果小数为 1.00 并且您希望它是 int,则这不起作用,除非您强制值 (3认同)
  • 我认为这个是实际的解决方案,因为这甚至适用于XX.0 (2认同)

小智 29

Number.isSafeInteger(value);
Run Code Online (Sandbox Code Playgroud)

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


Tho*_*mas 21

最常见的解决方案是剥离数字的整数部分并将其与零进行比较,如下所示:

function Test()
{
     var startVal = 123.456
     alert( (startVal - Math.floor(startVal)) != 0 )
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不只是`startVal!= Math.floor(startVal)`? (30认同)
  • @SeeyaK:当然它适用于负数.请随意尝试. (3认同)
  • 尼斯.相同的概念,但你的版本更清洁. (2认同)
  • @DeepakGoyal - 您提到的问题与在 JavaScript 中处理非常大的数字有关。我怀疑您必须获得一个使用位操作和数组来处理大于 JavaScript 最大数字的值的库。当然,另一种选择不是在 JavaScript 中执行此操作,而是将值传递给服务器端组件,在该组件中您使用可以处理非常大值的语言或库。 (2认同)

ken*_*bec 19

//字节输入怎么样?

Number.prototype.isInt= function(){
 return this== this>> 0;
}
Run Code Online (Sandbox Code Playgroud)

我总觉得javascript中的位运算符有点不好 -

他们几乎没有运动.

  • 对于大于2 ^ 31 - 1的整数,这会失败,因为`>>`将值转换为带符号的*32位整数*. (14认同)

dYa*_*ale 19

简单但有效!

Math.floor(number) === number;
Run Code Online (Sandbox Code Playgroud)

  • `Math.floor(3.0) == 3.0` 为 true,`Math.floor(3.3) == 3.3` 为 false (7认同)
  • @OmShankar高效!=有效 (4认同)

小智 8

Number.isInteger()可能是最简洁的。如果是整数则返回真,否则返回假。


小智 7

number = 20.5

if (number == Math.floor(number)) {

alert("Integer")

} else {

alert("Decimal")

}
Run Code Online (Sandbox Code Playgroud)

非常酷,也适用于 XX.0 之类的东西!它之所以有效,是因为 Math.floor() 会截掉任何有小数的小数,因此如果下限与原始数字不同,我们就知道它是小数!并且没有字符串转换:)