Direkt zum Hauptinhalt springen
eLearner.app
Modul 2 · Lektion 3 von 47/32 im Kurs~10 min
Lektionen des Moduls (3/4)

Zahlen und Math

In JavaScript gibt es nur einen einzigen numerischen Typ: number. Sowohl Ganzzahlen (Integers) als auch Dezimalzahlen (im Englischen floating point) leben dort. Es gibt keine separaten Typen int / float wie in anderen Sprachen.

JS
typeof 42; // 'number'
typeof 3.14; // 'number'
typeof -0.001; // 'number'
typeof Infinity; // 'number'   ← Infinity è un number speciale
typeof NaN; // 'number'   ← anche "Not a Number" è un number (!)

Das globale Math-Objekt

Math ist keine Funktion: Es ist ein Objekt mit nützlichen Methoden und Konstanten. Es wird nicht instanziiert, sondern direkt verwendet:

JS
Math.min(3, 1, 7); // 1
Math.max(3, 1, 7); // 7
Math.abs(-5); // 5
Math.round(4.5); // 5
Math.floor(4.9); // 4   (arrotonda sempre per difetto)
Math.ceil(4.1); // 5   (arrotonda sempre per eccesso)
Math.sqrt(16); // 4
Math.pow(2, 10); // 1024   (equivalente a 2 ** 10)
Math.PI; // 3.141592653589793

Zufallszahlen

Math.random() gibt eine Dezimalzahl zwischen 0 (inklusive) und 1 (exklusive) zurück. Um eine Ganzzahl in einem bestimmten Bereich zu erhalten, verwendest du eine kleine Formel:

JS
// Intero casuale fra 0 e 9
Math.floor(Math.random() * 10);

// Intero casuale fra 1 e 6 (un dado a sei facce)
Math.floor(Math.random() * 6) + 1;

Die Probleme mit Dezimalzahlen (floating point)

JS verwendet die 64-Bit-IEEE-754-Darstellung, die fast alle Programmiersprachen teilen. Es ist eine binäre Darstellung, daher können einige Dezimalzahlen nicht exakt dargestellt werden:

JS
0.1 + 0.2; // 0.30000000000000004 (!)
0.1 + 0.2 === 0.3; // false

Standardlösung: Runden mit toFixed(n) (gibt einen String zurück) oder die Verwendung von Cent/Promille-Beträgen, wenn man mit Geld arbeitet:

JS
(0.1 + 0.2).toFixed(2); // '0.30' (stringa)
Number((0.1 + 0.2).toFixed(2)); // 0.3 (number)

Probier es aus

Übung#js.m2.l3.e1
Versuche: 0Wird geladen…

Berechne die Fläche eines Kreises mit dem Radius `r = 5`, gerundet auf die zweite Dezimalstelle, als `number`. Für `r=5` wird 78.54 erwartet.

Editor wird geladen…
Hinweis anzeigen

Math.PI für Pi, ** für Potenzierung; .toFixed(2) zum Runden, Number(...) zur Rückumwandlung in number.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#js.m2.l3.e2
Versuche: 0Wird geladen…

Gib für die drei Zahlen 12, 7, 23 als letzten Ausdruck die Differenz zwischen dem Maximum und dem Minimum zurück (also 16).

Editor wird geladen…
Hinweis anzeigen

Math.max und Math.min akzeptieren mehrere Argumente durch Kommata getrennt.

Lösung nach 3 Versuchen verfügbar