HOWTO · JavaScript

Eine Gleitkommazahl in JavaScript in eine Ganzzahl umwandeln

Erfahren Sie, wie Sie JavaScript-Zahlen abschneiden oder runden, Dezimaltext parsen und unsichere bitweise Kurzformen vermeiden.

Auf dieser Seite

JavaScript unterscheidet nicht zwischen eigenen Typen für int und float. Beide Werte werden normalerweise als Number dargestellt. Um den Nachkommateil einer vorhandenen Zahl zu entfernen, verwenden Sie Math.trunc(), das gegen null abschneidet. Dieser Vorgang heißt Abschneiden gegen null:

console.log(Math.trunc(12.75));
console.log(Math.trunc(-12.75));

Ausgabe:

12
-12

Welche Methode passt, hängt vom gewünschten Ergebnis ab:

  • Verwenden Sie Math.trunc(value), um den Nachkommateil gegen null zu entfernen.
  • Verwenden Sie Math.floor(value) oder Math.ceil(value), wenn die Rundungsrichtung wichtig ist.
  • Verwenden Sie Math.round(value), um die nächste Ganzzahl auszuwählen.
  • Verwenden Sie parseInt(text, 10) bei Dezimaltext, nicht standardmäßig zum Abschneiden einer Number.

Eine Zahl mit Math.trunc() abschneiden

Math.trunc() gibt den Ganzzahlteil ohne Rundung zurück. Bei positiven Werten entfernt es alles nach dem Dezimaltrennzeichen. Bei negativen Werten bewegt es sich gegen null: Aus -12.75 wird -12, nicht -13.

const value = -12.75;

console.log(Math.trunc(12.75));
console.log(Math.trunc(value));

Ausgabe:

12
-12

Das ist meist die klarste Wahl, wenn der Wert bereits numerisch ist und nur der Ganzzahlanteil erhalten bleiben soll. Ein Wert zwischen -1 und 0 kann dabei eine negative Null erzeugen:

console.log(Object.is(Math.trunc(-0.5), -0));

Ausgabe:

true

Wenn die Anwendung -0 von 0 unterscheiden muss, behandeln Sie diesen Fall ausdrücklich.

Zum Runden floor(), ceil() oder round() wählen

Abschneiden und Runden sind verschiedene Vorgänge. Math.floor() liefert die größte Ganzzahl kleiner oder gleich dem Wert, Math.ceil() die kleinste Ganzzahl größer oder gleich dem Wert. Bei negativen Werten ist dieser Unterschied besonders wichtig:

const value = -12.75;

console.log(Math.floor(value));
console.log(Math.ceil(value));
console.log(Math.round(-1.5));

Ausgabe:

-13
-12
-1

Verwenden Sie Math.floor() als untere Grenze, Math.ceil() als obere Grenze und Math.round(), wenn die nächste Ganzzahl benötigt wird. Bei Gleichstand rundet JavaScript mit Math.round() gegen positive Unendlichkeit; deshalb ergibt Math.round(-1.5) den Wert -1.

Dezimaltext mit parseInt() auswerten

Wenn die Quelle eine Zeichenkette ist, kann parseInt() ihren Ganzzahlpräfix auswerten. Geben Sie für Dezimaltext den Radix 10 an:

console.log(parseInt("12.75", 10));
console.log(Number.isNaN(parseInt("not a number", 10)));

Ausgabe:

12
true

parseInt() folgt Parsing-Regeln und kann an einem Zeichen stoppen, das für den Radix ungültig ist. Deshalb unterscheidet sich die Funktion vom Abschneiden einer vorhandenen Zahl. Wenn die Eingabe zuerst vollständig in eine Zahl umgewandelt und geprüft werden muss, ist etwa Math.trunc(Number("12.75")) passend. Bei möglicher ungültiger Eingabe sollten Sie Number.isNaN() oder eine andere Validierung verwenden.

toFixed() und bitweise Kurzformen nicht allgemein verwenden

Number.toFixed() ist eine Formatierungsmethode. Sie rundet auf die gewünschte Anzahl Dezimalstellen und gibt eine Zeichenkette zurück; daher ist sie keine allgemeine Methode zur Ganzzahlumwandlung:

console.log(typeof (12.75).toFixed(0));

Ausgabe:

string

Bitweise Ausdrücke wie value | 0, ~~value und value >> 0 schneiden ebenfalls gegen null ab, wandeln den Wert aber zuerst in eine vorzeichenbehaftete 32-Bit-Ganzzahl um. Werte außerhalb dieses Bereichs können überlaufen:

console.log(2 ** 31 | 0);

Ausgabe:

-2147483648

Verwenden Sie diese Ausdrücke nur, wenn ausdrücklich eine vorzeichenbehaftete Int32-Koersion erforderlich ist. Sie sind kein sicherer oder klarerer Ersatz für Math.trunc().

Zu beachtende Grenzen

Number verwendet eine Gleitkommadarstellung mit doppelter Genauigkeit nach IEEE 754. Ganzzahlen werden nur bis Number.MAX_SAFE_INTEGER und Number.MIN_SAFE_INTEGER exakt dargestellt. Verwenden Sie bei exakter Ganzzahlarithmetik Number.isSafeInteger() und behandeln Sie nicht endliche Werte ausdrücklich:

console.log(Math.trunc(Infinity));
console.log(Math.trunc(NaN));

Ausgabe:

Infinity
NaN

Math.trunc() macht Infinity, -Infinity oder NaN nicht zu endlichen Ganzzahlen. Prüfen Sie die Eingabe, wenn die Anwendung eine endliche, sichere Ganzzahl verlangt.

Zusammenfassung

Bei einer vorhandenen JavaScript-Zahl beginnen Sie mit Math.trunc(value), wenn „Ganzzahl“ den gegen null entfernten Nachkommateil bedeutet. Wählen Sie Math.floor(), Math.ceil() oder Math.round(), wenn eine bestimmte Rundungsregel gilt. Nutzen Sie parseInt(text, 10) für Dezimaltext, beachten Sie, dass toFixed() formatierten Text erzeugt, und vermeiden Sie bitweise Kurzformen ohne bewusste 32-Bit-Koersion.