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

IT技术 javascript validation numbers integer
2021-01-28 20:32:24

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

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

使用模数将起作用:

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
我没有投反对票,但我会说它与 20.0 有关,仍然有小数点并满足上述要求。无论如何从我那里+1教我一些新东西:)
2021-03-17 20:32:24
@Abe:确实如此,尽管我认为这不太可能。不可能以20.0编程方式说是否有小数点,除非它表示为字符串。此外,其他解决方案都没有因为不解决这个问题而被否决;-)
2021-03-20 20:32:24
@SREEP:见上面的评论。当表示为数值时,0.00 在 JavaScript 中不是 0.00。它可以表示为字符串 ("0.00"),在这种情况下,问题是“检查字符串是否为整数”而不是“检查数字是否为整数”
2021-03-28 20:32:24
@Swanidhi:你是什么意思?什么将无效?"10."是一个整数,结果将与"10"or完全相同10
2021-03-29 20:32:24
OP 询问检查NUMBER是否为整数。他没有提到字符串——在这方面,安迪的回答是正确的。
2021-04-07 20:32:24
Number.isInteger(23);  // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false: 

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

它为和非数字参数返回 false NaNInfinity同时x % 1 != 0返回 true。

@dYale 这是因为2.000000000000000000001 === 2在 JavaScript 中
2021-03-15 20:32:24
@brianmearns OP 的问题是 anumber是否完整。如果您的输入是一个字符串,您当然需要将其转换为number第一个例如 via parseFloat()
2021-03-18 20:32:24
如果小数位太多,这将不起作用:Number.isInteger(2.000000000000000000001)// true
2021-03-23 20:32:24
12.0 的解决方案失败
2021-03-24 20:32:24
@VikasArora 不,它按预期工作。Number.isInteger(12.0)返回true
2021-04-11 20:32:24

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

string.indexOf(".") == -1;
在继续之前转换为字符串..即: yournumber.toString.indexOf(".")
2021-03-26 20:32:24
我认为当他的意思是它在某些国家/地区不起作用时,他指的是货币,因为欧元使用逗号而不是小数点。然而,这个问题不是特定于货币的,只是小数......就像数字的一小部分一样。
2021-03-30 20:32:24
francisco_ssb ..点符号是通用的...代表数学语言中的小数位..这是通用的,应该在任何国家都适用。如果您谈论逗号(“,”),则必须在 indexOf(“.”) 之前转换为点 (“.”),显然..
2021-03-31 20:32:24
如果十进制是 1.00 并且你希望它是一个 int 除非你强制值,这不起作用
2021-04-03 20:32:24
我认为这是实际的解决方案,因为这甚至适用于 XX.0
2021-04-07 20:32:24

简单,但有效!

Math.floor(number) === number;
@Fiddles,哦对了,这就是我想说的:效率不高,因为与 % mod 方法相比,它的性能要慢得多。谢谢指正
2021-03-18 20:32:24
Math.floor(3.0) == 3.0是真的,Math.floor(3.3) == 3.3是假的
2021-04-09 20:32:24
@OmShankar 高效!= 有效
2021-04-12 20:32:24

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

function Test()
{
     var startVal = 123.456
     alert( (startVal - Math.floor(startVal)) != 0 )
}
@SeeyaK:当然它适用于负数。请随意尝试。
2021-03-17 20:32:24
好的。相同的概念,但您的版本更简洁。
2021-03-18 20:32:24
@DeepakGoyal - 您提到的问题与在 JavaScript 中处理非常大的数字有关。我怀疑您必须获得一个使用位操作和数组来处理大于 JavaScript 最大数字的值的库。当然,另一种选择不是在 JavaScript 中执行此操作,而是将值传递给服务器端组件,在该组件中您使用可以处理非常大值的语言或库。
2021-03-30 20:32:24
为什么不只是startVal != Math.floor(startVal)
2021-04-04 20:32:24
@Andy E:这仅适用于正数。它不适用于负数..
2021-04-12 20:32:24