Robert Kuhlemann: JS verrechnet sich

Hilfe! Mein Zeitrechner spinnt!

Hier ein kurzes Script:

<script>
document.write(008*60+"<br>"+009*60+"<br>"+010*60+"<br>"+011*60)
</script>

Frage: Wieso rechnet JS bis 009*60 (=540) richtig und ab
010*60 (=480) falsch??
Oder anders gefragt: Was mache ich falsch??

Festgestellt unter MSIE4.0

Robert Kuhlemann

  1. Hallo Robert!

    Hilfe! Mein Zeitrechner spinnt!
    ...
    Frage: Wieso rechnet JS bis 009*60 (=540) richtig und ab
    010*60 (=480) falsch??
    Oder anders gefragt: Was mache ich falsch??

    Ganz kann ich dir deine Frage nicht beantworten, aber es liegt an der führenden Null. So ein ähnliches Thema wurde schon im Forum besprochen, schau mal unter <../../sfarchiv/1999_2/t03219.htm>.
    Viele Grüße,
    Alexander Kirk

  2. Hi,

    das haengt irgendwie mit den fuehrenden Nullen zusammen, und dem Parameter "Radix". Ein Zahl beginnend mit 0 wird als Oktalzahl, ohne 0 als Dezimal interpretiert.

    Aber warum das so ist, koennen die JS-Gurus besser erklaeren. Irgendwie gibt es auch noch 0x als Hexzahl.
    Wenn Du die fuehrenden 0 entfernst, stimmt die Rechnung

    Gruesse
    Wilhelm

    Hilfe! Mein Zeitrechner spinnt!

    Hier ein kurzes Script:

    <script>
    document.write(008*60+"
    "+009*60+"
    "+010*60+"
    "+011*60)
    </script>

    Frage: Wieso rechnet JS bis 009*60 (=540) richtig und ab
    010*60 (=480) falsch??
    Oder anders gefragt: Was mache ich falsch??

    1. Hallo!

      das haengt irgendwie mit den fuehrenden Nullen zusammen, und dem Parameter "Radix". Ein Zahl beginnend mit 0 wird als Oktalzahl, ohne 0 als Dezimal interpretiert.

      Aber warum das so ist, koennen die JS-Gurus besser erklaeren. Irgendwie gibt es auch noch 0x als Hexzahl.
      Wenn Du die fuehrenden 0 entfernst, stimmt die Rechnung

      Du hast es doch eigentlich schon alles gesagt. Na gut, man kann's noch etwas erlaeutern.
      Wie gesagt, mit 0 beginnende Zahlen werden oktal interpretiert. Also:

      oktal    dezimal    hexadezimal
        000          0           0x00
        001          1           0x01
        002          2           0x02
        003          3           0x03
        004          4           0x04
        005          5           0x05
        006          6           0x06
        007          7           0x07

      010          8           0x08
        011          9           0x09
        012         10           0x0A
        013         11           0x0B
        014         12           0x0C
        015         13           0x0D
        016         14           0x0E
        017         15           0x0F

      020         16           0x10
        021         17           0x11
        022         18           0x12
        023         19           0x13
        024         20           0x14
        025         21           0x15
        026         22           0x16
        027         23           0x17

      030         24           0x18

      So, na toll, und was ist jetzt mit der 008 und der 009? Tja, diese oktalen Zahlen gibt es gar nicht! Und der Netscape bringt da auch ganz brav eine Fehlermeldung, wie es sein soll (wenn diese auch ein wenig irrefuehrend ist). Aber der IE mit seiner schwachsinnigen Fehlertoleranz interpretiert 009 dann eben einfach als die dezimale Zahl 9, was schlicht und einfach falsch ist. Lest es von meinen Lippen: FALSCH! *aufreg* *fluch* Und 9*60 ist nach wie vor 540. Aber die 010 erkennt er dann wieder als ordentliche oktale Zahl, welche der dezimalen 8 entspricht, tja und 8*60 ist eben 480.

      Wieder mal ein schoenes Beispiel, wie Microsoft den Leuten eine rosa Welt vorspielt, wo es fuer sie einfacher waere, wenn man ihnen erlauben wuerde, selber zu denken. *laester*

      Calocybe