Mathematische Werte Runden
Matthias
- javascript
Hallo zusammen!
Wie kann ich im Javascript eine mathematische Rechenoperation auf z.B. zwei Kommastellen runden?
Wer hat mir einen Tipp?
Besten Dank.
MfG
Matthias
hi,
Wie kann ich im Javascript eine mathematische Rechenoperation auf z.B. zwei Kommastellen runden?
zuerst sie dir Math.round() an - http://selfhtml.teamone.de/javascript/objekte/math.htm#round
da dies nur ganzzahliges runden unterstützt, ist zuerst eine multiplikation mit einer zehnerpotenz, dann das runden, und anschliessendes dividieren durch die gleiche zehnerpotenz erforderlich, um auf kommastellen zu runden.
gruss,
wahsaga
Hallo,
leider ist das Problem nicht so ganz einfach. Und zwar deshalb, weil das abschließende Dividieren (hier durch 100) im Dualsystem nicht glatt verläuft.
Beispiel:
Die Zahl
0.001101 (dual) = 0.203125 (dezimal) soll auf 2 Stellen (dezimal) gerundet werden.
Multiplikation mit 100:
10100.0101 (dual) = 20,3125 (dezimal)
Runden:
10100 (dual) = 20 (dezimal)
Die abschlißende Division durch 100 gibt nun einen unendlichen Dezimalbruch:
0.0011001100110011...(dual) =0,20 (dezimal)
Das Ergebnis in dualer Zahlendarstellung ist also nicht genau, sondern wird irgendwo abgschnitten.
Beim Rückumwandeln in Dezimal kommt dann evtl. nur 0,1999999999... heraus, das hängt davon ab wie der Browser programmiert ist.
Bei Euros ist es z.B. sicherer, alles durchgehend in ganzen Zahlen (Cent) zu rechnen und in die darzustellenden Ergebnisse als Zeichenkette den Punkt einzufügen, dann kann das nicht passieren.
Gruß
Hans35
Hi,
Die abschlißende Division durch 100 gibt nun einen unendlichen Dezimalbruch:
wenn dem so ist, könnte man dieses Problem doch auch leicht lösen, indem man die Zahl in einen String umwandelt und diesen hinten einfach abschneidet...
freundliche Grüße
Ingo
Hi,
wenn dem so ist, könnte man dieses Problem doch auch leicht lösen, indem man die Zahl in einen String umwandelt und diesen hinten einfach abschneidet...
Mit Strings kann man halt nicht rechnen.
Gruß
Hans35
Hi,
Mit Strings kann man halt nicht rechnen.
muß man ja - in diesem Fall - auch nicht. es geht doch lediglich um die aufrundung einer zahl bzw. wenn man die rundung mit dem faktor 100 bereits vorgenommen hat darum, die letzten ziffern abzuschneiden. wozu muß man das denn ausrechnen?
freundliche Grüße
Ingo
hi,
wenn dem so ist, könnte man dieses Problem doch auch leicht lösen, indem man die Zahl in einen String umwandelt und diesen hinten einfach abschneidet...
Mit Strings kann man halt nicht rechnen.
nein, aber dafür kann man den string ja wieder in eine zahl umwandeln ;-)
aber grundsätzlich hast du recht, dass mein vorschlag für "dezimale" rechnung auf einem binärsystem etwas zu kurz gedacht war ...
gruss,
wahsaga
Hi,
nein, aber dafür kann man den string ja wieder in eine zahl umwandeln ;-)
genau das meinte ich ja... wo flieskomma-berechnungen zu unerwünschten rundungsergebnissen führen können, nutze ich auch in anderen programmiersprachen schonmal gern entsprechende stringfunktionen.
um's vielleicht für das vorliegende javascript-beispiel einmal konkret in code zu verpacken:
var zahl=123.456;
zahl=Math.ceil(zahl*100); var z=zahl.toString();
zahl=parseFloat(z.substr(0,z.length-2)+"."+z.substr(z.length-2,2));
freundliche Grüße
Ingo
Hallo,
da dies nur ganzzahliges runden unterstützt, ist zuerst eine multiplikation mit einer zehnerpotenz, dann das runden, und anschliessendes dividieren durch die gleiche zehnerpotenz erforderlich, um auf kommastellen zu runden.
Runden-Threads gab es hier ja schon viele und auch ziemlich ausgefeile Loesungen. Ich verwende diese Funktion:
function Runden(x,s)
{
// Runden des Wertes x auf s Nachkommastellen
if(x.toFixed)
{
return x.toFixed(s);
}
else
{
return parseInt(x*Math.pow(10,s)+0.5)/Math.pow(10,s);
}
}
z. B. hier http://www.datenverdrahten.de/svglbc/matrixcalc.htm.
MfG, Thomas