524 Stimmen

Wie überprüft man, ob eine Variable in JavaScript eine Ganzzahl ist?

Wie überprüfe ich in JavaScript, ob eine Variable eine Ganzzahl ist, und gebe einen Alert aus, wenn nicht? Ich habe es versucht, aber es funktioniert nicht:

            var data = 22;
            alert(NaN(data));

3voto

formiaczek Punkte 385

Die "akzeptierte" Antwort ist falsch (wie einige Kommentare unten darauf hinweisen). Diese Änderung kann es funktionieren lassen:

if (data.toString() === parseInt(data, 10).toString())
    alert("Daten sind eine gültige Ganzzahl")
else
    alert("Daten sind keine gültige Ganzzahl")

3voto

Charles Chu Punkte 47

Number.isInteger() ist der beste Weg, wenn Ihr Browser es unterstützt. Andernfalls gibt es meiner Meinung nach viele Möglichkeiten:

function isInt1(value){
  return (value^0) === value
}

oder:

function isInt2(value){
  return (typeof value === 'number') && (value % 1 === 0); 
}

oder:

function isInt3(value){
  return parseInt(value, 10) === value; 
}

oder:

function isInt4(value){
  return Math.round(value) === value; 
}

Jetzt können wir die Ergebnisse testen:

var value = 1
isInt1(value)   // gibt true zurück
isInt2(value)   // gibt true zurück
isInt3(value)   // gibt true zurück
isInt4(value)   // gibt true zurück

var value = 1.1
isInt1(value)   // gibt false zurück
isInt2(value)   // gibt false zurück
isInt3(value)   // gibt false zurück
isInt4(value)   // gibt false zurück

var value = 1000000000000000000
isInt1(value)   // gibt false zurück
isInt2(value)   // gibt true zurück
isInt3(value)   // gibt false zurück
isInt4(value)   // gibt true zurück

var value = undefined
isInt1(value)   // gibt false zurück
isInt2(value)   // gibt false zurück
isInt3(value)   // gibt false zurück
isInt4(value)   // gibt false zurück

var value = '1' // Zahl als Zeichenkette
isInt1(value)   // gibt false zurück
isInt2(value)   // gibt false zurück
isInt3(value)   // gibt false zurück
isInt4(value)   // gibt false zurück

Also, all diese Methoden funktionieren, aber wenn die Zahl sehr groß ist, funktionieren parseInt und der ^ Operator nicht gut.

3voto

Hemant Punkte 391
var x = 1.5;
if(!isNaN(x)){
 console.log('Nummer');
 if(x % 1 == 0){
   console.log('Ganzzahl');
 }
}else {
 console.log('keine Zahl');
}

3voto

gbozee Punkte 3566

Sie könnten versuchen Number.isInteger(Number(value)), wenn value möglicherweise eine Ganzzahl in Zeichenfolgenform ist, z.B. var value = "23" und Sie möchten, dass dies als true ausgewertet wird. Vermeiden Sie es, Number.isInteger(parseInt(value)) zu versuchen, weil dies nicht immer den richtigen Wert zurückgibt. z.B. wenn var value = "23abc" ist und Sie die parseInt Implementierung verwenden, würde es immer noch true zurückgeben.

Aber wenn Sie streng Ganzzahlenwerte wollen, dann sollte wahrscheinlich Number.isInteger(value) den Trick tun.

3voto

ferhrosa Punkte 1664

Sie könnten diese Funktion verwenden:

function isInteger(value) {
    return (value == parseInt(value));
}

Das wird auch true zurückgeben, wenn der Wert ein String ist, der einen Integer-Wert enthält.
Also werden die Ergebnisse sein:

alert(isInteger(1)); // true
alert(isInteger(1.2)); // false
alert(isInteger("1")); // true
alert(isInteger("1.2")); // false
alert(isInteger("abc")); // false

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X