Berechnungen in JavaScript werden mit der Genauigkeit des mathematischen Co-Prozessors
(FPU) durchgeführt. Oft genug ist aber die hohe Stellenzahl störend, besser wäre
ein Ergebnis, welches weniger Stellen häte und dadurch übersichtlicher wirken könnte.
Das folgende Skript rundet eine Zahl auf die ersten n Stellen, egal wo das Dezimalkomma
steht.
Syntax
Ergebnis = RelativesRunden(Wert, Stellen)
Wert
Zahl, die gerundet werden soll
Stellen
Anzahl Stellen, auf die gerundet werden soll. Die Stelle(n) vor dem Komma
werden mitgezählt.
Ergebnis
Rückgabewert. Entspricht Wert, nachdem dieser auf die
vorgegebene Anzahl von Stellen gerundet worden ist.
Anmerkungen
Zahlen müssen mit dem Dezimalkomma eingegeben werden oder unter Verwendung der
Funktion InZahl() umgewandelt werden.
Bedingt durch Rundungsfehler läuft die Funktion nicht immer ganz sauber. In
diesem Beispiel trifft das zu, falls als Stellenzahl 4 gewählt wird.
Seit der Version 1.5 von JavaScript gibt es für das Number-Objekt die Methoden
toExponential(Stellen), toPrecision(Stellen) und
toFixed(Stellen), welche die Aufgabe des Skriptes übernehmen.
Funktions-Demo
Das folgende Formular demonstriert die Wirkung der Funktion.
Code
<SCRIPT LANGUAGE="JavaScript1.1" TYPE="text/javascript"><!--
/* Rundet eine Zahl auf eine bestimmte Stellenzahl */
function RelativesRunden(Wert, Stellen)
{ // Autor: Ralf Pfeifer, www.ArsTechnica.de
if (Wert == 0)
return 0
else
with (Math) {
// Bereinigung der Stellenzahl
Stellen = floor(abs(Stellen))
if (Stellen == 0) { Stellen = 1 }
var Exponent = round(log(abs(Wert)) * LOG10E)
if (abs(Wert) < pow(10, Exponent)) { Exponent-- }
var Potenz = pow(10, 1 + Exponent - Stellen)
return ((Wert < 0) ? "-" : "") + round(abs(Wert) / Potenz) * Potenz
}
} // -->
</SCRIPT>