JavaScript

Knowledge Base

JavaScript / ECMAScript

Datentyp Number

Number ist in der ECMAScript Spezifikation ein Fließkommazahlentyp mit 64-bit und doppelter Genauigkeit gemäß dem IEEE 754-Standard: https://de.wikipedia.org/wiki/IEEE_754-2008

Hinweis: Es gibt in JavaScript den primitiven Datentyp Number (Fließkommazahl) aber auch einen speziellen Object-Wrapper Number, der verwendet wird, um den primitiven Number um Objektmethoden zu erweitern. Das geschieht i. d. R. transparent (und vermutlich aus Performance-Gründen auch nur "virtuell"), d. h. wenn z. B. auf die Eigenschaft ".toString" (zur Umwandlung in einen String) verwendet wird, wird der Number intern mit einem Number-Objekt gewrappt, um diesen dann in einen String umzuwandeln.

Number verwendet dazu 52 Bits für die Zahl selbst, 11 Bits für den Exponenten und 1 Bit für das Vorzeichen.

Beispiele:

<script>
    var a = 25.12;
    document.writeln(a + "<br>");
    document.writeln("typeof(a) = " + typeof(a) + "<br>");
 
     a = 12;
    document.writeln(a + "<br>");
    document.writeln("typeof(a) = " + typeof(a) + "<br>");
 
    a = 0.1 + 0.2;
    document.writeln(a + "<br>");
    document.writeln("typeof(a) = " + typeof(a) + "<br>");
</script>  

liefert:

25.12
typeof(a) = number
12
typeof(a) = number
0.30000000000000004
typeof(a) = number

Es handelt sich also bei einer ganzen Zahl oder auch bei einer Fließkommazahl immer um "number".

Wie im Beispiel erkennbar muss man bei Operationen im Fließkommabereich vorsichtig mit der Erwartung bzgl. des Ergebnisses sein - eine einfache Rechnung von 0.1 + 0.2 ergibt 0.30000000000000004 und nicht 0.3, was mit der Implementierung der doppelten Präzision zu tun hat (und oft bei Fließkommazahlen-Berechnung vorkommen kann).

Um die Präzision wieder herzustellen, können die Fließkommawerte zunächst in ganze Zahlen umgerechnet und das Ergebnis dann wieder zurückgerechnet werden.

<script>
        a = (0.1 * 10 + 0.2 * 10) / 10;
        document.writeln(a + "<br>");
        document.writeln("typeof(a) = " + typeof(a) + "<br>");
</script>

liefert:

0.3
typeof(a) = number

Infinity:

Zahlen außerhalb des Number-Wertebereichs werden in JavaScript mit dem Wert Infinity dargestellt - es gibt +Infinity (oder nur Infinity) und -Infinity.

+/- Infinity wird auch bei Division durch 0 als Wert "ausgegeben" - und nicht NaN (not a number).

NaN (not a number):

NaN ist ebenfalls ein Wert des Datentyps Number und wird dann verwendet, wenn es sich nicht mehr um eine Zahl handelt - z. B. bei Division durch einen String, der nicht in eine Zahl umgewandelt werden kann - Beispiel:

<script>
a = 1 / "T";
document.writeln(a + "<br>");
document.writeln("typeof(a) = " + typeof(a) + "<br>");

</script>

Ausgabe:

NaN
typeof(a) = number