Henna: Rechenungenauigkeit

Hallo,

ich arbeite gerade an einer Eingabemaske, in der Prozentwerte eingetragen werden sollen.
Dabei gubt es einen Knopf, der die Felder auf 100% bringt.
Dabei ist mir aufgefallen, das Javascript wohl ein Problem mit negativen Zahlen hat.

Beispiel:
<script>
 alert(100 - 105.67);
</script>

Dabei kommt -5.670000000000002 heraus.

Kennt jemand diesen effekt und weiß wie ich ihn umgehen kann?

Gruß Henna

  1. hallo,

    wenn es dafür einen echten work-around gibt, wäre das ne feine sache. javascript hat aber nicht nur in diesem fall damit probleme. ich hatte immer eine eigene kleine helferfunktion zusätzlich genutzt.

    zb. sowas wie:
    http://www.dcljs.de/faq/antwort.php?Antwort=rechnen_runden
    http://www.web-toolbox.net/webtoolbox/mathematik/werte-runden.htm

    viele grüße
    chris

  2. hi,

    Dabei ist mir aufgefallen, das Javascript wohl ein Problem mit negativen Zahlen hat.

    Nein, das hat es nicht.

    Wohl aber, wie auch andere Sprachen, und binäre Rechner generell, ein Problem mit der Genauigkeit von Dezimalbrüchen.

    http://de.wikipedia.org/wiki/Gleitkommazahl#Dezimalzahlen

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Wohl aber, wie auch andere Sprachen, und binäre Rechner generell, ein Problem mit der Genauigkeit von Dezimalbrüchen.

      Das klingt quarkig ...

      Mit der Genaugikeit der Darstellung von Dezimalbrüchen als Binärzahlen trifft es etwas besser.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo,

    man probiere aus

    <script>
    var Zahl=100;
    alert(Zahl);
    var Zahl1=Zahl-105.67;
    alert(Zahl1);
    var Zahl2=Zahl1+105.67;
    alert(Zahl2);
    </script>

    Die Ungenauigkeit von Zahl1 müsste per Zahl2 aufgehoben werden,
    obwohl das getrennte Variablen sind.
    alert() formatiert u.a. zu Stringwerten. Die Funktionsweise von
    alert() muss ermittelt werden.

    Gruss Tom.

    1. Hello out there!

      <script>

      Du weißt immer noch nicht, wie JavaScript-Bereiche in HMTL definiert werden?

      Zum Rest deines Postings hab ich eine Frage: Hä??

      See ya up the road,
      Gunnar

      --
      „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    2. alert() formatiert u.a. zu Stringwerten. Die Funktionsweise von
      alert() muss ermittelt werden.

      Mal wieder völliger Quatsch was du erzählst

      Du hast dir die hier bereits verlinkten Seiten durchgelesen, auf denen erklärt wird warum es zu diesem Phänomen kommt?

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. Hallo,

        alert() ist eine Routine, die zum Zweck der Anzeige von Werten und Zeigern zwangsweise formatiert - z.B. .toString() impliziert oder
        nicht volle Kommastellen anzeigt etc.

        Da der Fehler per alert()-Anweisung angezeigt wurde, ist die Formatierung durch alert() heranzuziehen.

        Das war der Sinn meines Postings - an einem Beispiel.

        Tom.

        1. alert() ist eine Routine, die zum Zweck der Anzeige von Werten und Zeigern zwangsweise formatiert - z.B. .toString() impliziert oder
          nicht volle Kommastellen anzeigt etc.

          ok.

          Da der Fehler per alert()-Anweisung angezeigt wurde, ist die Formatierung durch alert() heranzuziehen.

          Aha, dann ersetze mal alert() durch document.write(), der Fehler ensteht nicht durch alert()

          Das war der Sinn meines Postings - an einem Beispiel.

          Eben, sinnlos.

          Struppi.

          --
          Javascript ist toll (Perl auch!)