kaufm. Runden
Stephan Beeker
hallo Forumsbesucher, ich habe folgendes Problem:
ich möchte Zahlen ab .5 auf die nächst höhere Zahl aufrunden und unter .5 auf die
nächst niedrigere Zahl abrunden - allgemein als kaufm. Runden bekannt.
In JavaScript gibt es dazu die Funktion round().
Gibt es in Perl eine Vergleichbare Funktion oder muß ich mir selbst ne Krücke
programmieren? Und falls letzteres zutrifft, wie mach ich das am effizientestesten?
vielen Dank im vorraus
Stephan
Hallo Stephan,
Gibt es in Perl eine Vergleichbare Funktion oder muß ich mir selbst ne Krücke
programmieren? Und falls letzteres zutrifft, wie mach ich das am effizientestesten?
Zumindest die Forumsnachrichten des aktuellen Tages koennte man ja mal lesen <g> - 5 Threads tiefer, bitte!
viele Gruesse
Stefan Muenz
Hallo Stephan,
ich möchte Zahlen ab .5 auf die nächst höhere Zahl aufrunden und unter .5 auf die
nächst niedrigere Zahl abrunden - allgemein als kaufm. Runden bekannt.
In JavaScript gibt es dazu die Funktion round().
Gibt es in Perl eine Vergleichbare Funktion oder muß ich mir selbst ne Krücke
programmieren? Und falls letzteres zutrifft, wie mach ich das am effizientestesten?
In Perl gibt es keine Vergleichbare Funktion. In den meisten Fällen (so auch in Perl) kann
man sich aber mit einer Rundungsfunktion weiterhelfen, die einfach alles nach dem Komma
abschneidet. Vorher nur noch der halbe Wert der zu rundenden Stelle hinzuaddiert, und
fertig ist die kaufmännische Rundung. In Perl kann man hierzu die int Funktion verwenden.:
$zahl = 1.55;
$zahl = int($zahl + 0.5);
Will man auf eine andere Stelle Runden, so kann den Wert vorher entsprechend Multiplizieren, so daß die ganzzahliege Rundung wieder einsetzbar ist. Z.b durch *100 für zwei Nachkommastellen oder /10 für die 10er. Man kann sogar "krumme" Werte benutzen, wie
ganze 50er. Nach dieser Rundung muß die Multiplikation nur noch Rückgängig gemacht
werden.
$zahl = 43.1;
$zahl = int(($zahl/50)+0.5)*50; # => 50
Möchte man aber bei Zehnerpotenzen bleiben, so kann man sich in Perl zum Runden von
Zahlen auch der sprintf Funktion bedienen. Hier gibt man einen Formatstring an, der in unserem
Falle eine Platzhalter für eine Fließkommazahl enthält. Gefolgt von dem einzusetzenden Wert
(also die zu Rundende Zahl) gibt sprintf dann den gewünschten String aus.%x.yf dient hier als Platzhalter für Fließkommazahlen. x steht für die Mindestanzahl der Vorkommastellen - y für die
zu verwendenden Nachkommastellen (in Deinem Falle 0):
$zahl = 1.55;
$zahl = sprintf("%0.0f", $zahl);
P.S: ein paar Threads weiter vorne hat Slobodan schon eine Frage aus der gleichen Schublade gestellt
Bei ihm tauchen ständig Fehler beim Runden auf ...
Gruß,
Jörk