Yanıtlar:
Modülü kullanmak işe yarayacaktır:
num % 1 != 0
// 23 % 1 = 0
// 23.5 % 1 = 0.5
Bunun biçimden bağımsız olarak sayının sayısal değerini temel aldığını unutmayın . Tamsayılarla aynı sabit ondalık noktası olan tam sayılar içeren sayısal dizeleri ele alır:
'10.0' % 1; // returns 0
10 % 1; // returns 0
'10.5' % 1; // returns 0.5
10.5 % 1; // returns 0.5
20.0
Bir dize olarak ifade edilmediği sürece programlı olarak ondalık noktası olup olmadığını söylemek imkansızdır . Ayrıca, diğer çözümlerin hiçbiri ;-) ile mücadele etmemek için aşağı oy alamadı
"10."
bir tamsayıdır ve sonuç "10"
veya ile tam olarak aynı olur 10
.
Number.isInteger(23); // true
Number.isInteger(1.5); // false
Number.isInteger("x"); // false:
Number.isInteger () , ES6 standardının bir parçasıdır ve IE11'de desteklenmez.
Bunun için false döndürür NaN
, Infinity
ve sayısal olmayan argümanları ise x % 1 != 0
döner gerçek.
Number.isInteger(12.0)
döner true
.
Number.isInteger('1e3')
olduğunu false
olsa Number.isInteger(1e3)
doğrudur. Söz konusu amaç varsayılarak, daha sonra dize değeri '12 .0' (yerine temsili bir ondalık noktasının fiili varlığı daha az) tamsayı olmayan değerleri bulmak için gereken bir tam sayıyı temsil eder, ancak yine olarak geçirmek, Number.isInteger('12.0')
bir false
.
number
bütün olup olmadığıdır. Girişiniz bir dize ise, bunu bir number
ilk örneğe dönüştürmeniz gerekir, örneğin parseFloat()
, tabii ki.
Veya bunu ondalık DEĞİL olup olmadığını öğrenmek için kullanabilirsiniz:
string.indexOf(".") == -1;
yournumber.toString.indexOf(".")
En yaygın çözüm, sayının tamsayı kısmını çıkarmak ve bunu sıfıra karşılaştırmaktır:
function Test()
{
var startVal = 123.456
alert( (startVal - Math.floor(startVal)) != 0 )
}
startVal != Math.floor(startVal)
?
Math.Floor
Fonksiyon ondalık bir değer alır ve JavaScript izin verilen en büyük ondalık değerdir 2^53 - 1
ya 9007199254740991
. Yana 893144042145698745.3
bu maksimum değerden daha büyük, işlev başarısız olur.
Basit ama etkili!
Math.floor(number) === number;
Math.floor(3.0) == 3.0
doğru, Math.floor(3.3) == 3.3
yanlış
// Bayt etmeye ne dersiniz?
Number.prototype.isInt= function(){
return this== this>> 0;
}
Javascript'teki bit operatörleri için her zaman biraz kötü hissediyorum.
neredeyse hiç egzersiz yapmıyorlar.
>>
Değeri işaretli bir 32 bit tam sayıya dönüştürdüğü için , 2 ^ 31 - 1'den büyük tamsayılar başarısız olur .
number = 20.5
if (number == Math.floor(number)) {
alert("Integer")
} else {
alert("Decimal")
}
Oldukça güzel ve XX.0 gibi şeyler için de çalışıyor! Math.floor () varsa ondalık keser çünkü zemin orijinal sayıdan farklıysa ondalık olduğunu biliriz! Ve dize dönüşümü yok :)
var re=/^-?[0-9]+$/;
var num=10;
re.test(num);
num= 999999999999999999999
.
Number.isInteger()
muhtemelen en özlüdür. Bir tamsayı ise doğru, değilse bir tamsayı döndürür.
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;
}
sayı dizesini ondalık noktaya bölerek diziye dönüştürür. Sonra, dizi yalnızca bir değere sahipse, bu dize ondalık yok demektir.
if(!number.split(".")[1]){
//do stuff
}
Bu şekilde tamsayı ve ondalık sayıların gerçekte ne olduğunu da öğrenebilirsiniz. daha gelişmiş bir örnek olurdu.
number_to_array = string.split(".");
inte = number_to_array[0];
dece = number_to_array[1];
if(!dece){
//do stuff
}
İşte koruma kütüphanemden bir alıntı (David Herman'dan Etkili JavaScript'ten esinlenilmiştir):
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
Şunları yapabilirsiniz 10 ile çarpın ve daha sonra bir "do modülo " operasyonu / Divisónde 10 ile ve bu iki faaliyet sonucu sıfır mı bakın. Bu iki işlemin sonucu size ondalık noktadan sonraki ilk basamağı verecektir . Sonuç sıfıra eşitse, sayı bir tamsayıdır.
if ( (int)(number * 10.0) % 10 == 0 ){
// your code
}
function isDecimal(num) {
return (num !== parseInt(num, 10));
}
Yuvarlama için kullanılabilen ondalık kısmı atmak için değeri ( ^ 0
veya ~~
) değiştirmeyen bitsel işlemleri kullanabilirsiniz . Sayıyı yuvarladıktan sonra, orijinal değerle karşılaştırılır:
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);
}
Bir sayının ondalık basamakları olup olmadığını kontrol etmek için aşağıdaki işlevi kullanabilirsiniz:
function hasDecimal(num){
return !!(num % 1);
}
console.log(hasDecimal(2)); //false
console.log(hasDecimal(2.32423)); //true
Görünüşe göre bazı kullanıcılar açıklama istiyor. Parçalara ayıracağım: (num% 1)
Parantez, önce bu işlemleri yapmak anlamına gelir. num - fonksiyon tarafından iletilen bir değişken. % - sol sayıyı sağa bölmeye çalışan bir modül sembolü. Kalan varsa, ondalık olarak döndürür. Eşit olarak bölünürse 0 döndürür.
Yani, şimdiye kadar sahip olduklarımızı özetleyin., (Num% 1) geri dönecek:
Eşit olarak bölündüğünde 0 VEYA # .#### değilse
0 == yanlış.
[ANY_NUMBER_NOT_ZERO] == doğru.
Örnekler: yeni Boolean (0) yanlış yeni Boolean (12312.1231) doğru
Diğer alternatifler: Bir kullanıcı temelde aynı şeyi elde edecek olan (num% 1) değerini döndürmeye çalışabilirdi. Dönüş (0) yanlış ve dönüş (1.213113) doğru olduğundan.
Ama bir boole değeri döndürmek istedim. Yani bir değeri bir boole zorlamak için bir kısayol olarak bir! önce sembol.
Bildiği kadarıyla.,! DEĞİL anlamına gelir. Ama aynı zamanda bir değeri bir boole değerine zorlar.
Beri ! symobol değeri bir boole değerine zorlar ve değerini tersine çevirir. Kullanırım !! değeri bir boole değerine zorlamak ve değerini orijinal boolean değerine geri çevirmek için.
Kontrol numarası işlevi Ondalık veya tam sayıdır
function IsDecimalExist(p_decimalNumber) {
var l_boolIsExist = true;
if (p_decimalNumber % 1 == 0)
l_boolIsExist = false;
return l_boolIsExist;
}
Belki bu senin için işe yarıyor mu?
Sayıda virgül olup olmadığını kontrol etmek için regex kullanır ve yoksa virgül ve şerit ekler.
var myNumber = '50';
function addCommaStripe(text){
if(/,/.test(text) == false){
return text += ',-';
} else {
return text;
}
}
myNumber = addCommaStripe(myNumber);
Değer dize ise (örneğin <input
):
Math.floor(value).toString() !== value
(Ondalık ayırıcı veya başka bir dize ile biter) .toString()
durumlarda da işe yaraması için yere ekleyin value == "1."
. Ayrıca Math.floor
her zaman bir değer döndürür, bu yüzden .toString()
asla başarısız olmaz.