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

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

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

Ответы [ 20 ]

1 голос
/ 25 августа 2018

Вы можете использовать следующую функцию, чтобы проверить, имеет ли число десятичные разряды:

function hasDecimal(num){
    return !!(num % 1);
}

console.log(hasDecimal(2)); //true
console.log(hasDecimal(2.32423)); //false

Так что, очевидно, некоторые пользователи хотят объяснений. Я разобью его на части: (num% 1)

Скобки означают выполнение этих операций в первую очередь. num - переменная, переданная функцией. % - символ модуля, который пытается разделить левое число на правое. Если есть остаток, он возвращает его в виде десятичной дроби. Если он делится равномерно, он возвращает 0.

Итак, суммируйте то, что у нас есть. (Num% 1) вернет:

0 при равномерном делении ИЛИ #. ##### если нет

0 == неверно.

[ANY_NUMBER_NOT_ZERO] == true.

Примеры: new Boolean (0) - false, new Boolean (12312.1231) - true

Другие альтернативы: пользователь мог попытаться вернуть значение (num% 1)., Что в основном позволило бы достичь того же. Так как return (0) - false, а return (1.213113) - true.

Но я хотел вернуть логическое значение. Чтобы добавить значение в логическое значение, я добавил! символ перед ним.

Столько, сколько могли знать. значит нет. Но это также превращает значение в логическое значение.

С тех пор! symobol переводит значение в логическое значение и инвертирует его значение. Я использую !! заставить значение в логическое значение и инвертировать его обратно в исходное логическое значение.

1 голос
/ 05 апреля 2017

Вы можете умножить его на 10 , а затем выполнить операцию " по модулю " / деление на 10 и проверить, равен ли результат этих двух операций нулю , В результате этих двух операций вы получите первую цифру после десятичной точки. Если результат равен нулю, то число является целым числом.

if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}
1 голос
/ 21 января 2015
parseInt(num) === num

когда передано число, parseInt() просто возвращает число как int:

parseInt(3.3) === 3.3 // false because 3 !== 3.3
parseInt(3) === 3     // true
1 голос
/ 15 октября 2015

Вот отрывок из моей охранной библиотеки (вдохновлен Effective JavaScript Дэвидом Херманом):

var guard = {

    guard: function(x) {
        if (!this.test(x)) {
            throw new TypeError("expected " + this);
        }
    }

    // ...
};

// ...

var number = Object.create(guard);
number.test = function(x) {
    return typeof x === "number" || x instanceof Number;
};
number.toString = function() {
    return "number";
};


var uint32 = Object.create(guard);
uint32.test = function(x) {
    return typeof x === "number" && x === (x >>> 0);
};
uint32.toString = function() {
    return "uint32";
};


var decimal = Object.create(guard);
decimal.test = function(x) {
    return number.test(x) && !uint32.test(x);
};
decimal.toString = function() {
    return "decimal";
};


uint32.guard(1234);     // fine
uint32.guard(123.4);    // TypeError: expected uint32

decimal.guard(1234);    // TypeError: expected decimal
decimal.guard(123.4);   // fine
0 голосов
/ 28 апреля 2016

Функция для контрольного номера - десятичное или целое число

function IsDecimalExist(p_decimalNumber) {
    var l_boolIsExist = true;

    if (p_decimalNumber % 1 == 0)
        l_boolIsExist = false;

    return l_boolIsExist;
}
0 голосов
/ 23 февраля 2018

Вы можете использовать побитовые операции, которые не изменяют значение (^ 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
0 голосов
/ 04 августа 2017
function isDecimal(num) {
  return (num !== parseInt(num, 10));
}
0 голосов
/ 01 апреля 2019
function isWholeNumber(num) {
  return num === Math.round(num);
}
0 голосов
/ 06 июня 2019

Возможно, это работает для вас?

var myNumber = '50';
function addCommaStripe(text){
    if(/,/.test(text) == false){
        return text += ',-';
    } else {
        return text;
    }
}
myNumber = addCommaStripe(myNumber);
0 голосов
/ 03 июля 2016

преобразовать числовую строку в массив, разделить на десятичную точку. Затем, если массив имеет только одно значение, это означает отсутствие десятичного числа в строке.

if(!number.split(".")[1]){
    //do stuff
}

Таким образом, вы также можете узнать, что такое целые и десятичные числа. более сложный пример будет.

number_to_array = string.split(".");
inte = number_to_array[0];
dece = number_to_array[1]; 

if(!dece){
    //do stuff
}
...