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

7voto

Elliot Bonneville Punkte 49372

Überprüfen Sie, ob die Variable gleich dieser gleichen Variable gerundet auf eine Ganzzahl ist, wie hier:

if(Math.round(data) != data) {
    alert("Variable ist keine Ganzzahl!");
}

6voto

Die einfachste und sauberste vorecmaScript-6-Lösung (die auch robust genug ist, um false zurückzugeben, selbst wenn eine nicht-numerische Werte wie ein String oder null an die Funktion übergeben werden) wäre folgende:

function isInteger(x) { return (x^0) === x; } 

Die folgende Lösung würde auch funktionieren, obwohl sie nicht so elegant ist wie die obige:

function isInteger(x) { return Math.round(x) === x; }

Beachten Sie, dass Math.ceil() oder Math.floor() ebenso gut verwendet werden könnten (anstelle von Math.round()) in der obigen Implementierung.

Oder alternativ:

function isInteger(x) { return (typeof x === 'number') && (x % 1 === 0); }

Eine ziemlich häufige falsche Lösung ist die folgende:

function isInteger(x) { return parseInt(x, 10) === x; }

Obwohl dieser auf parseInt basierende Ansatz für viele Werte von x gut funktioniert, wird er bei großen x Werten versagen. Das Problem ist, dass parseInt() seinen ersten Parameter zuerst in einen String zwangsumwandelt, bevor er die Ziffern analysiert. Daher wird, sobald die Zahl hinreichend groß wird, ihre Zeichenketten-Repräsentation in exponentieller Form dargestellt (z.B. 1e+21). Dementsprechend wird parseInt() dann versuchen, 1e+21 zu analysieren, wird aber beim Eintreffen des e-Zeichens mit dem Analysieren aufhören und daher einen Wert von 1 zurückgeben. Beobachten Sie:

> String(1000000000000000000000)
'1e+21'

> parseInt(1000000000000000000000, 10)
1

> parseInt(1000000000000000000000, 10) === 1000000000000000000000
false

6voto

nights Punkte 391

Warum hat noch niemand Number.isInteger() erwähnt?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

Funktioniert perfekt für mich und löst das Problem mit dem NaN, das eine Nummer beginnt.

5voto

user889030 Punkte 3543

Die akzeptierte Antwort hat bei mir nicht funktioniert, da ich nach int/float und Buchstaben prüfen musste. Versuchen Sie stattdessen dies, es wird sowohl für int/float als auch Buchstabenprüfung funktionieren

function is_int(value){
        if( (parseInt(value) % 1 === 0 )){
            return true;
        }else{
            return false;
        }
}

Verwendung

is_int(44);   // true
is_int("44");   // true
is_int(44.55);  // true
is_int("44.55");  // true
is_int("aaa");  // false

5voto

guest Punkte 59
if(Number.isInteger(Number(data))){
    //-----
}

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