Hallo Andreas
Abgesehen davon, solltest du sowohl bei deiner Funktion als auch bei der gelinkten eine Sonderfallbehandlung einbauen:
alle Dezimalzahlen die auf .145, .285, .565 bzw. .575 enden werden ab statt aufgerundet (Fließkomma Präzision)
Wieso? Das verstehe ich jetzt nicht.
weil sich diese Zahl nicht als endlicher Binärbruch darstellen läßt und dass führt bei Rechnenoperationen zu einem internen Rundungsfehler.
Alle diese Rundungsfunktionen (inklusive die von Peter) multiplizeren die Zahl mit der Zehnerpotenz der Stellenzahl, runden dann und dividieren das Ergebnis dann durch die Zehnerpotenz der Stellenzahl
Das bedeutet, soll 0.145 auf 2 Stellen nach dem Komma gerundet werden, dann ergibt: 0.145 * 100 nicht wie erwartet 14.5 sondern 14.499999999999998. Gerundet ergibt dies aber eben 14 und nicht 15 und damit dann 0.14.
Wann dieser Fehler auftritt ist abhängig von verschiedenen Faktoren und betrifft übrigens nicht alle Dezimalzahlen mit der beschriebenen Endung. So beeinflußt sogar die Reihenfolge der Rechenoperationen das Ergebnis.
So führt die Aufgabe Zahl / (1 / 100) durchschnittlich gesehen zu einem schlechteren Ergebnis als Zahl * 100.
Bei unkritischen Zahlenausgaben spielt der Rundungsfehler meist keine Rolle. In einem Shop-System aber schon.
Um die Sache zu vervollständigen, ich kann jedem nur raten auf die Verwendung der Methode toFixed zu verzichten. Meine Tests haben ergeben, dass beim Runden auf 2 Stellen nach dem Komma je nach Browser was sehr verschiedenes rauskommt.
IE:
rundet alle negativen Zahlen deren Rundungsstelle auf 5 endet, ab statt auf, was tatsächlich jedoch ein Fehler in der Spezifikation ist
ausserdem werden die Zahlen 0.005, 0.006 ... 0.009 ab statt aufgerundet.
Mozilla:
rundet - entgegen der Spezifikation die negativen Zahlen richtig, jedoch wurde ein so schlechter Algorithmus gewählt, dass bei 1000 Durchläufen (von 0.000, 0.001 ... 0.999) ganze 48 Rundungsfehler auftraten. Diese Rundungsfehler wiederholen sich auch bei größeren Zahlen.
Opera: wie Mozilla, aber statt 48 Rundungsfehler treten sogar 50 Rundungsfehler auf.
Insgesamt ist das eine verteufelte Sache mit dem Rundungsfehler.
Viele Grüße
Antje