parseInt im Netscape 4
Ulrich Müller
- javascript
Hallo,
hat jemand eine plausible Erklärung warum Netscape 4 bei alert(parseInt(.31)) oder jeder anderen beliebigen Zahl größer 0 und kleiner 1 nur NaN ausgibt?
Gruß,
Ulrich
Hi Ulrich,
hat jemand eine plausible Erklärung warum Netscape 4 bei alert(parseInt(.31)) oder jeder anderen beliebigen Zahl größer 0 und kleiner 1 nur NaN ausgibt?
Ja, und zwar http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#parse_int - dort steht:
<zitat>Gibt NaN (Not a Number) zurück, wenn die Zeichenkette mit Zeichen beginnt, die sich nicht als Teil einer Zahl interpretieren lassen.</zitat>
Tja, und ein Punkt is halt keine Zahl.
Grüße,
Utz
hi ullrich,
kann deine beobachtung leider nur bestätigen...
ich wuerde es als bug klassifizieren, und denke du musst leider irgendwas "aussenrum" programmieren..
der ns6 packts dann wieder...
bezogen auf utz:
schreib ne null davor und es geht leider trotzdem nicht...
Hi,
schreib ne null davor und es geht leider trotzdem nicht...
Sorry, aber das ist Quatsch. Dieser Code:
<html>
<head>
<title>Test</title>
</head>
<body>
<script type="text/javascript">
document.write(parseInt("0.56"));
</script>
</body>
</html>
liefert im NS 4.03 das korrekte Ergebnis 0. parseInt(".56") - auch völlig korrekt - liefert NaN. Beides übrigens auch im IE 5.
Grüße,
Utz
PS: Jetzt weiß ich auch woher die Verwirrung kommt: alert(parseInt(.31)) ist an sich schon Quatsch gewesen, weil parseInt auf ne Zahl angewendet wurde - komplett widersinnig. Natürlich macht parseInt() nur dann Sinn, wenn es seinem Zweck entsprechend auf Strings angewendet wird. Fazit: Kein Bug weit und breit, nur falsch gecoded.
Hallo,
<html>
<head>
<title>Test</title>
</head>
<body>
<script type="text/javascript">
document.write(parseInt("0.56"));
|
+--> gefährlich
</script>
</body>
</html>
Seid mit dem parseInt bitte vorsichtig, besonders, wenn Ihr mit führenden Nullen arbeitet, wie hier im Forum schonmal diskutiert wurde und auch in Selfhtml (http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#parse_int) ausgeführt ist, bildet die führende Null bei parseInt() ein gewisses Problem, wenn man den Parameter Radix vergißt.
Bis denndann
Michael N.
Hi Michael,
Seid mit dem parseInt bitte vorsichtig, besonders, wenn Ihr mit führenden Nullen arbeitet, wie hier im Forum schonmal diskutiert wurde und auch in Selfhtml (http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#parse_int) ausgeführt ist, bildet die führende Null bei parseInt() ein gewisses Problem, wenn man den Parameter Radix vergißt.
Gilt das Problem auch für ParseFloat?
Fragt sich
Heiko
Hallo Heiko,
Seid mit dem parseInt bitte vorsichtig, besonders, wenn Ihr mit führenden Nullen arbeitet, wie hier im Forum schonmal diskutiert wurde und auch in Selfhtml (http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#parse_int) ausgeführt ist, bildet die führende Null bei parseInt() ein gewisses Problem, wenn man den Parameter Radix vergißt.
Gilt das Problem auch für ParseFloat?
Aus http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#parse_float kannst Du die Antwort entnehmen, auch die NN-Doku spricht von keinem zweiten Parameter für parseFloat().
Warum das ganze so bei parseInt() ist, kannst Du Dir ganz einfach im Forumsarchiv anlesen, indem Du auf folgenden Link klickst: http://forum.de.selfhtml.org/archiv/1999_2/t03219.htm.
Falls Dich die ganze Sache interessiert (da wurde im Forum schon häufiger nach gefragt), schau mal hier: http://selfsuche.teamone.de/cgi-bin/such.pl?suchausdruck=%2BparseInt+%2BHex&lang=on&feld=alle&index_4=on&index_5=on&index_6=on&index_7=on&index_8=on&hits=alle, da findest Du auch den obengenannten Thread.
Bis denndann
Michael N.
Danke Michael.
Den parseFloat habe ich bereits in (meinem lokalen) SelfHTML nachgeschaut. Aber deine zusätzlichen Links sind sehr interessant.
Heiko
Hallo Ulrich,
parseInt nimmt einen String und geht ihn von anfang solange durch bis er ein Zeichen finden das er nicht umwandeln kann. Findet er am Anfang ein Zeichen ist es NaN(Not a Number) und Du erhälst keine Zahl.
.31 -> geht nicht da er . nicht als Zahl interpretieren kann
0.31 -> geht, da wohl ein regilärer Ausdruchk darauf angewendet wird der eine Punkt zwischen zwei Zahlen zulässt
44abd33 -> ergibt 44 da er bei a abbricht
Michael R. II
Hi!
.31 -> geht nicht da er . nicht als Zahl interpretieren kann
Jedenfalls nicht als Ganzzahl. Als Floatingpoint-Zahl dagegen schon. Dafuer gibt es dann parseFloat().
0.31 -> geht, da wohl ein regilärer Ausdruchk darauf angewendet wird der eine Punkt zwischen zwei Zahlen zulässt
Nein, das geht deswegen, weil der Ausdruck mit einer Ziffer beginnt. Bei der ersten NichtZiffer wird der Vorgang abgebrochen. Bis dahin wurde eine 0 gesehen. Also kommt 0 raus. Genauso laeuft es in Deinem naechsten Beispiel ab:
44abd33 -> ergibt 44 da er bei a abbricht
So long