Fehlfunktion bei 'eval' und 'parseInt'
Andreas Bleul
- javascript
Wenn das Argument von eval bzw. parseInt führende Nullen hat, kommt es zu sonderbaren Ergebnissen:
eval('07') und parseInt('07') liefern die Zahl 7 -
wie erwartet.
Bei eval('08') bekommt man 8 , parseInt('08')
liefert jedoch 0...
Und wenn eval('010') bzw. parseInt('010') ausgeführt wird, sind sie sich wieder einig und liefern 8 (!) zurück...selbst eval('010*2') liefert konsequent 16.
Das geschieht sowohl bei IE als auch bei Netscape.
Weiß jemand, wie man den Fehler umschiffen kann ?
Danke,
Andreas
Wenn das Argument von eval bzw. parseInt führende Nullen hat, kommt es zu sonderbaren Ergebnissen:
die sind nicht sonderbar sondern absolut korrekt
eval('07') und parseInt('07') liefern die Zahl 7 -
wie erwartet.
völlig richtig
Bei eval('08') bekommt man 8 , parseInt('08')
liefert jedoch 0...
auch richtig, gibt es eigentlich nämlich gar nicht
Und wenn eval('010') bzw. parseInt('010') ausgeführt wird, sind sie sich wieder einig und liefern 8 (!) zurück...selbst eval('010*2') liefert konsequent 16.
auch richtig
Das geschieht sowohl bei IE als auch bei Netscape.
sieha da, die beiden zankhähne sind sich doch nicht etwa einig
Weiß jemand, wie man den Fehler umschiffen kann ?
Es ist kein Fehler, sondern eine Funktion.
Die vorangestellte null signalisiert den Funktionen, dass Du NICHT mit Dezimalzahlen arbeitest, sondern mit Oktalzahlen. Ich hoffe du weißt, was das ist.
Also was ist passiert:
07 = 7 absolut richtig
08 != 8 da hier der Überschlag erfolgen sollte mit:
010 = 8 nach der 7 kommt die 8 .....
2*8 = 16 sollte soweit richtig sein
wie kommst du der sache bei:
mit eval() fällt mir nix ein,
aber parseInt(Ausdruck,radix) kennt ein 2. Argument, den radix. Wenn du hier 10 eingibst müsste es wieder klappen(aus Zeitmangel nicht getestet.
Sieh mal hier nach
http://www.teamone.de/selfhtml/sfausles/tsfa_tca.htm#a10
Bye Ed X
Sieh mal hier nach
http://www.teamone.de/selfhtml/sfausles/tsfa_tca.htm#a10
Thanx, da steht des Rätsels Lösung !
Guten Tag
Bei Deinem "Problem" dürfte es sich allem Anschein nach um das Oktalsystem handeln (01234567), ein Relikt aus älteren Zeiten. Heute werden Oktalzahlen durch eine führende Null gekennzeichnet.
Bei eval('08') bekommt man 8 , parseInt('08')
liefert jedoch 0...
eval scheint hier das Oktalsystem nicht zu interpretieren bzw. ist etwas intelligenter als parseInt und bemerkt, daß es sich hier anscheinend um einen String oder eine normale Zahl handelt, da die Zahl so wie sie da steht im Oktalsystem nicht gültig ist ... parseInt gibt korrekterweise 0 zurück, da die Zahl im Oktalsystem nicht zu finden ist und somit bei "0" Schluß ist.
Und wenn eval('010') bzw. parseInt('010') ausgeführt wird, sind sie sich wieder einig und liefern 8 (!) zurück...
Das ist auch gut so. Durch die führende Null gekennzeichnet interpretieren beide die Zahl im Oktalsystem: 1x8 + 0x1 = 8. Für 011 sollte dann konsequenterweise 9 zurückgegeben werden, für 012 10, 013 11 usw.
selbst eval('010*2') liefert konsequent 16.
Gut so. 8*2 ist auch 16 :-)
Das geschieht sowohl bei IE als auch bei Netscape.
Dann freuen wir uns, daß ausnahmsweise mal beide etwas gleich machen.
Weiß jemand, wie man den Fehler umschiffen kann ?
Ist kein Fehler, ist Absicht. Du mußt nur die führende Null loswerden, dann wird es auch nach Deinen Wünschen (dezimal) interpretiert werden.
Ciao,
Harry