Stephan Beeker: kaufm. Runden

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

  1. 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

  2. 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