Archiv

Artikel Tagged ‘Dezimalzahl’

Ausgabe der Funktion parseInt() falsch?

14. April 2011 Keine Kommentare

Warum gibt die Funktion parseInt(’08′) und parseInt(’09′) bei JavaScript jeweils den Wert 0 zurück?

 

Problem:

// Ergebnis: number = 0;
var number = parseInt('08');

// Ergebnis: number = 0;
var number = parseInt('09');

Mir ist dieses, nennen wir es mal Phänomen, aufgefallen als ich einen Kalender programmiert habe. Handelt es sich hierbei um einen Bug?

 

Wir schauen uns hierzu die offizielle Beschreibung der Funktion parseInt() genauer an:

parseInt(string, radix)

string: die Zeichenkette, welche zu einer Ganzzahl umgewandelt werden soll
radix: Basis des Zahlensystems, in welches die Zeichenkette interpretiert wird

 

Besonderheiten:
Zeichenketten die mit ’0x’ anfangen werden ohne Angabe des zweite Arguments automatisch als Hexadezimalzahlm also zur Basis 16, interpretiert.
Zeichenketten die mit einer ’0′ anfangen werden ohne Angabe des zweiten Arguments automatisch als Oktalzahl, also zur Basis 8, interpretiert.

 

Warum gibt jedoch parseInt(’08′) und parseInt(’09′) den Wert 0 zurück?
Es handelt sich hierbei um einen Fehlerwert. Eine Oktalzahl enthält Ziffern von 0 bis 7.
Äquivalent dazu ergibt beispielsweise parseInt(’06′, 6) den Wert 0 zurück.
In den meisten Fällen wollen wir jedoch eine schöne Dezimalzahl ausgegeben bekommen.

 

Lösung:
Wir benutzen den zweiten Parameter radix und erzwingen die Funktion, uns eine schöne Dezimalzahl auszugeben:

// Ergebnis: number = 8
var number = parseInt('08',10);

// Ergebnis: number = 9
var number = parseInt('09',10);

 

- Mustangore