Mika: Aufrunden einer Zahl

Hallo,

wie kann ich in Perl eine Zahl aufrunden? Wenn die Zahl 2,1 ist soll er also auf 3 runden. Wenn sie 2,9 ist ebenfalls...
Ich möchte die Zahl weiterverarbeiten.

Danke für eure Hilfe

Mika

  1. Moin!

    wie kann ich in Perl eine Zahl aufrunden? Wenn die Zahl 2,1 ist soll er also auf 3 runden. Wenn sie 2,9 ist ebenfalls...
    Ich möchte die Zahl weiterverarbeiten.

    Du suchst eine Funktion wie ceil(). Die rundet eine Zahl auf die nächstgrößere Integerzahl auf. http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q4.13.html

    Bedenke: Bei negativen Werten sind die wertmäßig größeren Zahlen die mit dem kleineren Absolutwert. -2,1 würde mit ceil() auf -2 aufgerundet

    - Sven Rautenberg

  2. Hallo Mika,

    wie kann ich in Perl eine Zahl aufrunden? Wenn die Zahl 2,1 ist soll er also
    auf 3 runden. Wenn sie 2,9 ist ebenfalls...

    Ich habe mal bei Google die Suchbegriffe »Perl« und »round« eingeben. Der
    erste ausgegebene Link ist dieser:
    http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q4.13.html

    Dort wird empfohlen, sich entweder die Funktion schnell selber zu basteln
    oder das Posix-Modul einzubinden. Auch diverse Math-Module aus CPAN dürften
    dafür recht interessant sein.

    Google findet aber auch noch einiges, wenn man nach »Perl« und »runden«,
    also auf Deutsch, sucht. Ebenso die SELF-Suche. Wieso hast Du das nicht
    benutzt?

    Solltest Du die Funktion selber basteln wollen, achte darauf, daß Du die
    ceil-Funktion, kein korrektes mathematisches Runden oder die floor-Funktion
    basteln willst (Floor und Ceil, Boden und Decke dürften sich hier von
    selbst erklären).

    Ich habe nie wirklich was in Perl gemacht, diese spontan entworfene Funktion
    ist also mit Vorsicht zu genießen und deswegen in Pseudocode geschrieben:

    funktion ceil(float nummer):
        return int(nummer - 0.1) + 1

    Mit Deinem Beispiel erklärt:
    Du willst alles größer als 2 und kleinergleich 3 auf 3 aufgerundet haben.
    Die Funktion int() schneidet einfach nur die Nachkommastellen ab, alles
    zwischen 2.1 und 2.9 würde also auf 2 gerundet. Deswegen wird hinterher
    noch die 1 addiert. Dann würde aber die 2.0 auch auf 3 gerundet werden,
    was sich nicht im Sinne des Erfinders ist. Deswegen wird vor dem Runden
    0.1 subtrahiert, 2.0 - 0.1 ergibt 1.9, die Nachkommastelle mit int()
    abgeschnitten ergibt 1, 1 dazu addiert ergibt 2.

    Achtung: Weswegen diese Funktion mit Vorsicht zu genießen ist:
    0.1 ist hier ein fester Betrag, das ist die Schwachstelle. Zahlen mit mehr
    Nachkommestellen wie 2.01 oder 2.0009 werden nicht auf 3 aufgerundet, obwohl
    sie deutlich größer als 2 sind, stattdessen werden sie auf 2 abgerundet.
    Auch funktioniert dies natürlich nicht mit negativen Zahlen.

    Je nach Anwendungszweck kann man das Vernachlässigen. Im Zweifelsfall
    würde ich dann aber die korrekten Funktionen aus den entsprechenden
    Paketen benutzen denn der Quick-and-Dirty-Lösung

    Tim