Відповіді:
Використання модуля буде працювати:
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
є десяткова крапка програмно, якщо вона не виражається як рядок. Крім того, жодне з інших рішень не отримало голосування за те, щоб не боротися з цим ;-)
"10."
це ціле число, і результат буде точно таким же, як "10"
або 10
.
Number.isInteger(23); // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false:
Number.isInteger () є частиною стандарту ES6 і не підтримується в IE11.
Вона повертає неправдиві для NaN
, Infinity
і не числових аргументів в той час як x % 1 != 0
повертає істину.
Number.isInteger(12.0)
повертає true
.
Number.isInteger('1e3')
є false
, хоча Number.isInteger(1e3)
це правда. Якщо припустити, що питання питання полягає у знаходженні не цілих значень (а не фактичної присутності десяткової крапки у представленні), то значення рядка '12 .0 ' повинно пройти, оскільки воно являє собою ціле число, але знову ж таки Number.isInteger('12.0')
є false
.
number
це ціле чи ні. Якщо ваш вхід - це рядок, вам потрібно перетворити його в number
перший, наприклад, через parseFloat()
, звичайно.
Або ви можете просто скористатися цим, щоб дізнатися, чи НЕ є десятковою:
string.indexOf(".") == -1;
yournumber.toString.indexOf(".")
Найбільш поширене рішення - зняти цілу частину числа і порівняти його з нулем так:
function Test()
{
var startVal = 123.456
alert( (startVal - Math.floor(startVal)) != 0 )
}
startVal != Math.floor(startVal)
?
Math.Floor
Функція приймає значення десяткового і найбільше значення десяткового допускається в JavaScript є 2^53 - 1
або 9007199254740991
. Оскільки 893144042145698745.3
більший, ніж цей максимум, функція вийде з ладу.
Просто, але ефективно!
Math.floor(number) === number;
Math.floor(3.0) == 3.0
це правда, Math.floor(3.3) == 3.3
помилково
// Як щодо його байта?
Number.prototype.isInt= function(){
return this== this>> 0;
}
Я завжди відчуваю себе погано для бітових операторів у JavaScript-
вони навряд чи отримують будь-які вправи.
>>
перетворює значення в підписане 32-бітове ціле число .
number = 20.5
if (number == Math.floor(number)) {
alert("Integer")
} else {
alert("Decimal")
}
Дуже круто і працює для таких речей, як XX.0! Це працює тому, що Math.floor () відбиває будь-яку десяткову, якщо вона має одну, якщо підлога відрізняється від початкового числа, ми знаємо, що це десятковий! І ніяких рядкових перетворень :)
var re=/^-?[0-9]+$/;
var num=10;
re.test(num);
num= 999999999999999999999
.
Number.isInteger()
є, мабуть, найбільш стислим. Він повертає true, якщо це ціле число, і false, якщо це не так.
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
parseInt(3.0) === 3.0 // true
перетворити числовий рядок у масив, розділений на десяткові крапки. Тоді, якщо масив має лише одне значення, це означає, що в рядку немає десяткових знаків.
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
}
Ось уривок з моєї бібліотеки охоронців (натхненний Ефективним 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
}
Ви можете використовувати побітові операції, які не змінюють значення ( ^ 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);
}
Ви можете скористатися такою функцією, щоб перевірити, чи число має десяткові знаки:
function hasDecimal(num){
return !!(num % 1);
}
console.log(hasDecimal(2)); //false
console.log(hasDecimal(2.32423)); //true
Тому, мабуть, деякі користувачі хочуть пояснень. Я розбию його на шматки: (кількість% 1)
Середина парентезу виконує ці операції спочатку. num - змінна, передана функцією. % - символ модуля, який намагається розділити ліве число на праве. Якщо є залишок, він повертає його як десятковий. Якщо вона ділиться рівномірно, вона повертає 0.
Отже, підсумуйте те, що ми маємо досі., (Число% 1) повернеться:
0, якщо розділити рівномірно АБО #. #####, якщо ні
0 == false.
[ANY_NUMBER_NOT_ZERO] == вірно.
Приклади: new Boolean (0) false 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;
}
Можливо, це працює для вас?
Він використовує регулярний вираз, щоб перевірити, чи є в номері кома, а якщо немає, то додасть кому та смужку.
var myNumber = '50';
function addCommaStripe(text){
if(/,/.test(text) == false){
return text += ',-';
} else {
return text;
}
}
myNumber = addCommaStripe(myNumber);
Використовуйте наступне, якщо значення є рядковим (наприклад, від <input
):
Math.floor(value).toString() !== value
Я додаю .toString()
підлогу, щоб він працював також у випадках, коли value == "1."
(закінчується десятковим роздільником або іншим рядком). Також Math.floor
завжди повертає якесь значення, тому .toString()
ніколи не виходить з ладу.