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

1voto

Muhammed Rafiq Punkte 11

Dies wird ein weiteres Szenario lösen (121.), ein Punkt am Ende

function isInt(value) {
        var ind = value.indexOf(".");
        if (ind > -1) { return false; }

        if (isNaN(value)) {
            return false;
        }

        var x = parseFloat(value);
        return (x | 0) === x;

    }

1voto

Avram Tudor Punkte 1370

Von http://www.toptal.com/javascript/interview-questions:

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

Habe gefunden, dass dies der beste Weg ist, dies zu tun.

1voto

Martin Wantke Punkte 3753
function isInteger(argument) { return argument == ~~argument; }

Verwendung:

isInteger(1);     // true
isInteger(0.1);   // false
isInteger("1");   // true
isInteger("0.1"); // false

oder:

function isInteger(argument) { return argument == argument + 0 && argument == ~~argument; }

Verwendung:

isInteger(1);     // true
isInteger(0.1);   // false
isInteger("1");   // false
isInteger("0.1"); // false

1voto

macloving Punkte 1167

Sie können dafür RegExp verwenden:

function isInteger(n) {
    return (typeof n == 'number' && /^-?\d+$/.test(n+''));
}

1voto

Aleksa Ristic Punkte 2218

Mit den heutigen Browsern ist Number.isInteger() der richtige Weg, wie viele Antworten zuvor erklärt haben. Allerdings bin ich auf ein häufiges Problem gestoßen, das auftrat, als ich die API erstellt habe.

Bei der API-Anfrage erhalten wir Eigenschaften als string, sodass Number.isInteger() false zurückgibt.

Wenn wir versuchen, es mit Number.isInteger(parseInt()) zu überprüfen, werden Werte wie 1.1 oder 1.asd true zurückgeben.

Um dieses Problem zu lösen, habe ich eine Funktion erstellt, die überprüft, ob der Wert als integer betrachtet wird, unabhängig davon, ob er als integer oder string übergeben wird.

function isNumber(value) {
    return ([...value.toString()]
            .filter(x => [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' ]
            .indexOf(x) >= 0))
            .length == Math.max(value.toString().length, 1)
}

Der Math.max()-Teil wird benötigt, um leere Zeichenfolgen zu behandeln.

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