Проверьте, имеет ли число десятичное место/целое число

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

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

Ответ 1

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

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

Ответ 2

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

string.indexOf(".") == -1;

Ответ 3

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

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

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

Ответ 4

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

function Test()
{
     var startVal = 123.456
     alert( (startVal - Math.floor(startVal)) != 0 )
}

Ответ 5

//Как насчет байта?

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

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

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

Ответ 6

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

Math.floor(number) === number;

Ответ 7

var re=/^-?[0-9]+$/;
var num=10;
re.test(num);

Ответ 8

number = 20.5

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

alert("Integer")

} else {

alert("Decimal")

}

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

Ответ 9

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

Ответ 10

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;
}

Ответ 11

parseInt(num) === num

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

parseInt(3.3) === 3.3 // false because 3 !== 3.3
parseInt(3) === 3     // true

Ответ 12

Здесь выдержка из моей хранительской библиотеки (вдохновленная эффектным 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

Ответ 13

Вы можете размножить его на 10, а затем выполнить операцию по модулю "

с 10 и проверить, является ли результат двух операции равны нулю. Результат этих двух операций даст вам первую цифру после десятичной точки. Если результат равен нулю, то число представляет собой целое число.
if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}

Ответ 14

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

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] == верно.

Примеры: new Boolean (0) равен false new Boolean (12312.1231) равен true

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

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

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

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

Ответ 15

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

function IsDecimalExist(p_decimalNumber) {
    var l_boolIsExist = true;

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

    return l_boolIsExist;
}

Ответ 16

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

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
}

Ответ 17

$('.rsval').bind('keypress', function(e){  
        var asciiCodeOfNumbers = [48,46, 49, 50, 51, 52, 53, 54, 54, 55, 56, 57];
        var keynum = (!window.event) ? e.which : e.keyCode; 
        var val = this.value;
        var numlenght = val.length;
        var splitn = val.split("."); 
        var decimal = splitn.length;
        var precision = splitn[1];
        var startPos = this.selectionStart;
        var decimalIndex = val.indexOf('.'); 
        if(decimal == 2) {  
            if(decimalIndex < startPos){
                if(precision.length >= 2){
                  e.preventDefault();  
                }
            } 
        } 
        if( keynum == 46 ){  
            if(startPos < (numlenght-2)){
                e.preventDefault(); 
            }
            if(decimal >= 2) { e.preventDefault(); }  
        } 
        if ($.inArray(keynum, asciiCodeOfNumbers) == -1)
            e.preventDefault();    
  });

Ответ 18

function isDecimal(num) {
  return (num !== parseInt(num, 10));
}

Ответ 19

Вы можете использовать побитовые операции, которые не изменяют значение (^ 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

Ответ 20

function isWholeNumber(num) {
  return num === Math.round(num);
}

Ответ 21

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

Он использует регулярные выражения, чтобы проверить, есть ли запятая в числе, и если нет, то он добавит запятую и полосу.

var myNumber = '50';
function addCommaStripe(text){
    if(/,/.test(text) == false){
        return text += ',-';
    } else {
        return text;
    }
}
myNumber = addCommaStripe(myNumber);