EMZETT.
Login

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

OperatorBedeutungBeispielErgebnis
+ - * /Grundrechenarten7 / 23.5
%Rest (Modulo)7 % 21
**Potenz2 ** 101024
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
true

Division 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.30

Vergleiche 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,891

Math-Funktionen

FunktionWirkung
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.EKonstanten
Math.sin, Math.cos, Math.tanTrigonometrie (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
8

Zufallszahlen

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:

true

Achtung

Math.random() ist nicht für Passwörter oder Sicherheit geeignet. Dafür gibt es crypto.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 5

Groß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
246913578024691357802469135780n

Merke

  • Es gibt nur number für Zahlen (und BigInt für riesige ganze Zahlen)
  • % gibt den Rest, ** die Potenz
  • 0.1 + 0.2 !== 0.3: Kommazahlen mit Toleranz vergleichen
  • Math.round/floor/ceil/trunc runden verschieden; toFixed formatiert
  • Math.random() liefert 0 bis unter 1; Number.isNaN prü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

Weiter im Kurs

Zurück: Datentypen

Weiter: Operatoren und Vergleiche

Alle Kapitel: JavaScript im Überblick