Kurz: JavaScript kennt nur einen Zahlentyp number (64-Bit-Kommazahl nach IEEE 754) für Ganzzahlen und Kommazahlen. Dazu gibt es das eingebaute Objekt Math mit vielen Funktionen.
Teil des Kurses JavaScript
Kapitel 5 von 40 im Kurs JavaScript. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
JavaScript kennt nur einen Zahlentyp number (64-Bit-Kommazahl nach IEEE 754) für Ganzzahlen und Kommazahlen. Dazu gibt es das eingebaute Objekt Math mit vielen Funktionen.
Rechnen
| Operator | Bedeutung | Beispiel | Ergebnis |
|---|---|---|---|
+ - * / | Grundrechenarten | 7 / 2 | 3.5 |
% | Rest (Modulo) | 7 % 2 | 1 |
** | Potenz | 2 ** 10 | 1024 |
console.log(7 / 2, 7 % 2, 2 ** 10);
console.log(10 / 0, -10 / 0, 0 / 0);
console.log(Number.MAX_SAFE_INTEGER);
console.log(Number.EPSILON > 0);Ausgabe:
3.5 1 1024
Infinity -Infinity NaN
9007199254740991
trueDivision durch 0 gibt Infinity, 0 / 0 gibt NaN (Not a Number), keinen Fehler.
Das Kommazahlen-Problem
Kommazahlen werden binär gespeichert, deshalb sind manche nicht exakt darstellbar:
console.log(0.1 + 0.2);
console.log(0.1 + 0.2 === 0.3);
console.log(Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON);
console.log((0.1 + 0.2).toFixed(2));Ausgabe:
0.30000000000000004
false
true
0.30Vergleiche Kommazahlen nie mit ===, sondern mit einer kleinen Toleranz. Für Geld rechnest du am besten in Cent (ganze Zahlen).
Runden
const x = 4.567;
console.log(Math.round(x), Math.floor(x), Math.ceil(x), Math.trunc(x));
console.log(Math.round(-2.5), Math.floor(-2.5));
console.log(x.toFixed(1), Number(x.toFixed(1)));
console.log((1234567.891).toLocaleString("de-DE"));Ausgabe:
5 4 5 4
-2 -3
4.6 4.6
1.234.567,891Math-Funktionen
| Funktion | Wirkung |
|---|---|
Math.max(a, b, ...), Math.min(...) | größte/kleinste Zahl |
Math.abs(x) | Betrag |
Math.sqrt(x), Math.cbrt(x) | Quadrat-/Kubikwurzel |
Math.pow(a, b) | Potenz (wie **) |
Math.PI, Math.E | Konstanten |
Math.sin, Math.cos, Math.tan | Trigonometrie (Bogenmaß) |
Math.random() | Zufallszahl von 0 (einschl.) bis 1 (ausschl.) |
Math.hypot(a, b) | Länge der Hypotenuse |
console.log(Math.max(3, 9, 5), Math.min(3, 9, 5));
console.log(Math.sqrt(144), Math.abs(-7.5), Math.hypot(3, 4));
console.log(Math.PI.toFixed(5));
console.log(Math.max(...[4, 8, 2]));Ausgabe:
9 3
12 7.5 5
3.14159
8Zufallszahlen
Math.random() liefert eine Kommazahl. Für eine ganze Zufallszahl zwischen min und max (beide inklusive):
function zufall(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
const wuerfel = zufall(1, 6);
console.log(wuerfel >= 1 && wuerfel <= 6);Ausgabe:
trueAchtung
Math.random()ist nicht für Passwörter oder Sicherheit geeignet. Dafür gibt escrypto.getRandomValues().
NaN prüfen
NaN ist nicht gleich sich selbst. Prüfe mit Number.isNaN:
console.log(NaN === NaN, Number.isNaN(NaN), Number.isNaN("abc"));
console.log(Number.isInteger(5), Number.isInteger(5.5), Number.isFinite(1 / 0));
console.log(Number("12") + 1, parseInt("101", 2));Ausgabe:
false true false
true false false
13 5Große Zahlen mit BigInt
Ganze Zahlen über 2⁵³ − 1 werden mit number ungenau. BigInt (mit Endung n) rechnet exakt:
console.log(2 ** 64);
console.log(2n ** 64n);
console.log(123456789012345678901234567890n * 2n);Ausgabe:
18446744073709552000
18446744073709551616n
246913578024691357802469135780nMerke
- Es gibt nur
numberfür Zahlen (undBigIntfür riesige ganze Zahlen) %gibt den Rest,**die Potenz0.1 + 0.2 !== 0.3: Kommazahlen mit Toleranz vergleichenMath.round/floor/ceil/truncrunden verschieden;toFixedformatiertMath.random()liefert 0 bis unter 1;Number.isNaNprüft auf NaN
Übungsaufgabe
Schreibe eine Funktion, die eine Zufallszahl zwischen 1 und 100 liefert, und gib sie zusammen mit ihrer Quadratwurzel auf zwei Nachkommastellen aus.
Quiz zur Selbstkontrolle
Was ergibt 7 % 3?
- 1 (richtig)
- 2
- 2.33
- 0
Warum ist 0.1 + 0.2 === 0.3 falsch?
- Kommazahlen werden binär gespeichert und sind nicht exakt (richtig)
- JavaScript kann nicht addieren
- Der Operator === ist kaputt
- Es ist wahr
Wie prüfst du zuverlässig auf NaN?
- Number.isNaN(x) (richtig)
- x === NaN
- x == NaN
- typeof x === “nan”
Weiter im Kurs
Zurück: Datentypen
Weiter: Operatoren und Vergleiche
Alle Kapitel: JavaScript im Überblick