Я ищу простой способ в JavaScript проверить, имеет ли число десятичное место в нем (чтобы определить, является ли это целым числом). Например,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Я ищу простой способ в JavaScript проверить, имеет ли число десятичное место в нем (чтобы определить, является ли это целым числом). Например,
23 -> OK
5 -> OK
3.5 -> not OK
34.345 -> not OK
if(number is integer) {...}
Используя модуль будет работать:
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
Или вы можете просто использовать это, чтобы узнать, не является ли это десятичным числом:
string.indexOf(".") == -1;
Number.isInteger(23); // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false:
Number.isInteger() является частью стандарта ES6 и не поддерживается в IE11.
Он возвращает false для NaN
, Infinity
и нечисловых аргументов, а x % 1 != 0
возвращает true.
Наиболее распространенным решением является разбиение целочисленной части числа и сравнение его с нулем следующим образом:
function Test()
{
var startVal = 123.456
alert( (startVal - Math.floor(startVal)) != 0 )
}
//Как насчет байта?
Number.prototype.isInt= function(){
return this== this>> 0;
}
Я всегда плохо себя чувствую для операторов бит в javascript-
они вряд ли получат какое-либо упражнение.
Простой, но эффективный!
Math.floor(number) === number;
var re=/^-?[0-9]+$/;
var num=10;
re.test(num);
number = 20.5
if (number == Math.floor(number)) {
alert("Integer")
} else {
alert("Decimal")
}
Довольно круто и работает на такие вещи, как XX.0! Он работает, потому что Math.floor() отбивает любое десятичное число, если оно имеет один, поэтому, если пол отличается от исходного числа, которое мы знаем, оно является десятичным! И никаких преобразований строк:)
Number.isInteger()
, вероятно, является наиболее кратким. Он возвращает истину, если это целое число, и ложь, если это не так.
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;
}
parseInt(num) === num
когда передано число, parseInt()
просто возвращает число как int:
parseInt(3.3) === 3.3 // false because 3 !== 3.3
parseInt(3) === 3 // true
Здесь выдержка из моей хранительской библиотеки (вдохновленная эффектным 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
Вы можете размножить его на 10, а затем выполнить операцию по модулю "
с 10 и проверить, является ли результат двух операции равны нулю. Результат этих двух операций даст вам первую цифру после десятичной точки. Если результат равен нулю, то число представляет собой целое число.if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}
Вы можете использовать следующую функцию, чтобы проверить, имеет ли число десятичные разряды:
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 переводит значение в логическое значение и инвертирует его значение. Я использую !! заставить значение в логическое значение и инвертировать его значение обратно к исходному логическому значению.
Функция для контрольного номера - десятичное или целое число
function IsDecimalExist(p_decimalNumber) {
var l_boolIsExist = true;
if (p_decimalNumber % 1 == 0)
l_boolIsExist = false;
return l_boolIsExist;
}
преобразовать числовую строку в массив, разделить на десятичную точку. Затем, если массив имеет только одно значение, это означает, что в строке нет десятичного числа.
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
}
$('.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();
});
function isDecimal(num) {
return (num !== parseInt(num, 10));
}
Вы можете использовать побитовые операции, которые не изменяют значение (^ 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
function isWholeNumber(num) {
return num === Math.round(num);
}
Возможно, это работает для вас?
Он использует регулярные выражения, чтобы проверить, есть ли запятая в числе, и если нет, то он добавит запятую и полосу.
var myNumber = '50';
function addCommaStripe(text){
if(/,/.test(text) == false){
return text += ',-';
} else {
return text;
}
}
myNumber = addCommaStripe(myNumber);