Проверьте, имеет ли число десятичное место / является целым числом - PullRequest
230 голосов
/ 21 февраля 2010

Я ищу простой способ в JavaScript проверить, имеет ли число десятичное место в нем (чтобы определить, является ли оно целым числом). Например,

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

Ответы [ 20 ]

701 голосов
/ 21 февраля 2010

Использование модуль будет работать:

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
42 голосов
/ 24 октября 2011

Или вы можете просто использовать, чтобы узнать, не является ли это десятичным числом:

string.indexOf(".")==-1;
33 голосов
/ 15 марта 2017
Number.isInteger(23);  // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false: 

Number.isInteger () является частью стандарта ES6 и не поддерживается в IE11.

Возвращает false для NaN, Infinity и нечисловых аргументов, а x % 1 != 0 возвращает true.

20 голосов
/ 21 февраля 2010

Наиболее распространенным решением является удаление целой части числа и сравнение ее с нулем следующим образом:

function Test()
{
     var startVal = 123.456
     alert( (startVal - Math.floor(startVal)) != 0 )
}
19 голосов
/ 21 февраля 2010

// Как насчет этого?

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

Я всегда чувствую себя плохо из-за битовых операторов в javascript-

они вряд ли получают какое-либо упражнение.

16 голосов
/ 02 марта 2015

Просто, но эффективно!

Math.floor(number) == number;
4 голосов
/ 06 июня 2017
number = 20.5

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

alert("Integer")

} else {

alert("Decimal")

}

Довольно круто и работает на такие вещи, как XX.0 тоже! Это работает, потому что Math.floor () отбирает любое десятичное число, если оно есть, поэтому, если слово отличается от исходного числа, мы знаем, что это десятичное число! И без преобразования строк:)

4 голосов
/ 21 февраля 2010
var re=/^-?[0-9]+$/;
var num=10;
re.test(num);
3 голосов
/ 03 сентября 2018

Number.isInteger(), пожалуй, самый краткий. Он возвращает истину, если это целое число, и ложь, если это не так.

2 голосов
/ 26 октября 2012
function isDecimal(n){
    if(n == "")
        return false;

    var strCheck = "0123456789";
    var i;

    for(i in n){
        if(strCheck.indexOf(n[i]) == -1)
            return false;
    }
    return true;
}
...