In JavaScript gibt es zwei verschiedene Arten von Zahlen: Zahlen und „Bigints“.
Zahlen werden am häufigsten verwendet und repräsentieren den numerischen Datentyp im 64-Bit-Gleitkommaformat mit doppelter Genauigkeit.
number: ein numerischer Datentyp im 64-Bit-Gleitkommaformat mit doppelter Genauigkeit (IEEE 754).
Beispiele sind -6, -2.4, 0, 0.1, 1, 3.14, 16.984025, 25, 976, 1024.0 und 500000.bigint: ein numerischer Datentyp, der Ganzzahlen im Format mit beliebiger Genauigkeit darstellen kann.
Beispiele sind -12n, 0n, 4n und 9007199254740991n.let numericValue = 42;
// => 42
Ein Zahlenliteral wie 42 im JavaScript-Code ist ein Gleitkommawert, keine Ganzzahl.
Für den alltäglichen Gebrauch gibt es keinen eigenen Ganzzahltyp.
Der Typ bigint ist nicht dafür gedacht, den Typ number im Alltag zu ersetzen.
42 ist immer noch ein Number, kein BigInt.
Zahlen können auch in Literalformen wie 0b101, 0o13, 0x0A ausgedrückt werden. Mehr zur numerischen lexikalischen Grammatik erfährst du hier.
Die E-Notation gibt eine Zahl an, die mit 10 hoch einer bestimmten Potenz multipliziert werden soll.
Das Format der E-Notation besteht aus einer Zahl, gefolgt von e oder E, und dann der Zehnerpotenz, mit der multipliziert wird.
const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".
Die E-Notation kann auch verwendet werden, um sehr kleine Zahlen darzustellen:
const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.
Unterstriche können verwendet werden, um große Zahlen für den Nutzer leichter lesbar zu machen. Der Compiler ignoriert die Unterstriche vollständig.
const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000
Es gibt zwei eingebaute Objekte, die im Umgang mit Zahlen nützlich sind:
Number: statische Eigenschaften für gängige / nützliche Werte, statische Methoden zur Typprüfung und Typkonvertierung, Instanzmethoden zur Typkonvertierung und zum Formatieren von Zahlen als Strings.Math: Eigenschaften und Methoden für mathematische Konstanten und Funktionen, funktioniert nicht mit BigInt.Math enthält auch Methoden zum Runden von Zahlen.
Mehr über die verfügbaren Rundungsoptionen erfährst du in diesem javascript.info-Artikel zum Runden.
Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235
Das eingebaute globale object Number ist auch eine globale function, mit der sich fast alles zahlenähnliche in eine number umwandeln lässt.
Es ist weniger tolerant als das Parsen eines string in eine number.
const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);
unix;
// => 819199440000
Für Zahlen in JavaScript gibt es drei Arten von Maximalwerten (und Minimal- bzw. maximal negativen Werten):
VALUE: gegeben durch Number.MAX_VALUE und Number.MIN_VALUE
INFINITY: gegeben durch Number.POSITIVE_INFINITY und Number.NEGATIVE_INFINITY
SAFE_INTEGER: gegeben durch Number.MAX_SAFE_INTEGER und Number.MIN_SAFE_INTEGER
Weil Zahlen in JavaScript auf eine bestimmte Weise implementiert sind, kann nicht jede Zahl zwischen Number.MIN_VALUE und Number.MAX_VALUE dargestellt werden.
Allerdings kann jede Zahl zwischen Number.MIN_SAFE_INTEGER - 1 und Number.MAX_SAFE_INTEGER + 1 dargestellt werden.
JavaScript kennt mehrere spezielle Zahlenwerte:
NaN und Infinity.+0 und -0.Der Fehlerwert NaN (auch als „keine Zahl“ bekannt) entsteht in den folgenden Fällen.
Number('123'); // => 123
Number('Hello, World!'); // => NaN
Math.sqrt(-64); // => NaN
NaN + 69; // => NaN
NaN ist der einzige Wert, der nicht gleich sich selbst ist:
NaN === NaN; // => false
Wenn du prüfen möchtest, ob ein Wert NaN ist, musst du die globale Funktion isNaN() verwenden:
isNaN(NaN); // => true
isNaN(123); // => false
Infinity ist ein Fehlerwert, der auf eines von zwei Problemen hinweist:
Math.pow(2, 1024); // => Infinity
6 / 0; // => Infinity
-6 / 0; // => -Infinity
Infinity ist größer als jede andere Zahl (außer NaN).
Ebenso ist -Infinity kleiner als jede andere Zahl (außer NaN).
Mit der globalen Funktion isFinite() kannst du prüfen, ob ein Wert eine tatsächliche Zahl ist (weder unendlich noch NaN):
isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false
+0 und -0 sind in JavaScript verschiedene Zahlen. Sie können entstehen, wenn du eine Zahl darstellst, die so klein ist, dass sie nicht von 0 zu unterscheiden ist.
Die vorzeichenbehaftete Null ermöglicht es dir festzuhalten, „aus welcher Richtung“ du dich der Null genähert hast, also welches Vorzeichen die Zahl hatte, bevor sie als Null betrachtet wurde.
Es ist bewährte Praxis, so zu tun, als gäbe es nur eine Null.
Zahlen gelten als gleich, wenn sie denselben Wert haben.
1 == 1.0;
// => true
1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.
1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.
Weitere Informationen zu Vergleichen im Allgemeinen und zum Vergleichen numerischer Werte in JavaScript findest du unter Vergleich.
Weil Zahlen in JavaScript Gleitkommazahlen sind, ist jede Mathematik mit diesen Werten Gleitkommamathematik. Deshalb gilt in JavaScript:
0.1 + 0.2 === 0.3;
// => false
Eine kurze Erklärung findest du auf 0.30000000000000004.com, eine ausführliche in Anhang D von Oracles Numerical Computation Guide „What Every Computer Scientist Should Know About Floating-Point Arithmetic“.