Alexander: JS rechnet falsch!?!

'n Abend!

Ich habe versucht mit JavaScript etwas zu rechnen. Folgend ein aufs Minimum reduzierter Quellcode JS in HTML.

JS rechnet bei mir 46 x 0.4 = "18.400000000000002" (statt 18.4)!
Wie um alles in der Welt kommt das?! Die beiden Zahlenwerte sind Beispiele, bei anderen Werten kommt es auch teilweise vor - mit "allen" Browsern!

Kann mir jemand helfen?

Sommerliche Grüße
 Alexander

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>

<form name="f" id="f" action="javascript:alert(46 * 0.4);">
46 &times; 0,4 = 18,4<br>
Aber was macht JavaScript daraus:
<input type="submit" value="rechne doch richtig, du bl&ouml;de Kiste!">
</form>

</body>
</html>

  1. Hallo Alexander,

    Kann mir jemand helfen?

    ja: http://dcljs.de/faq/antwort.php?Antwort=rechnen_rechnen

    Grüße aus Nürnberg
    Tobias

    --
    [remote-signature:http://www.to-kl.de/self/sig/sig.php]
    1. Hallo Tobias.

      Danke, das war auch hilfreich.

      Grüße
       Alexander

      1. Hi,

        Danke, das war auch hilfreich.

        Beim Überfliegen festgestellt: Und übrigens fehlerhaft.

        Die Scripte dürften erst ab JS 1.1 funktionieren, nicht wie geschrieben ab 1.0.

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. Hallo Alexander,

    was du hier erlebst, ist ein ganz "normales" Rundungsproblem.
    Fließkommazahlen werden rechnerintern - wie alles andere auch - in binärer Darstellung gespeichert und nicht in dezimaler Form, wie wir sie sonst sehen. Zum Beispiel:
     0.2 = 0 * 1/2
         + 0 * 1/4
         + 1 * 1/8
         + 1 * 1/16
         + 0 * 1/32
         + 0 * 1/64
         + 1 * 1/128
        usw.
    Als Binärzahl also  0.0011001...

    Schon bei siesem Beispiel zeichnet sich ab, dass eine exakte Umrechnung eventuell nicht möglich ist. Es wird ein periodisch-unendlicher Bruch herauskommen, genauso wie sich der Zahlenwert 1/3 im Dezimalsystem nicht exakt darstellen lässt.

    Normalerweise ist der Fehler so klein, dass er nicht auffällt, weil die Zahlen nochmal gerundet werden, bevor sie z.B. angezeigt werden. Führt man aber mit solchen "fehlerbehafteten" Werten eine längere Rechnung durch, können sich die Fehler aufsummieren, so dass es dann so solchen phantomartigen nachkommastellen kommt, wie du sie in deinem Posting beschrieben hast.

    Ist das soweit verständlich?

    Gruß,

    Martin

    1. Hallo Martin.

      Ist das soweit verständlich?

      Ja, schönen Dank dafür!

      Und das nennt sich dann hochmoderne Rechenkiste... ;-)

      Grüße
       Alexander