Aufrunden einer Zahl
Mika
- perl
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
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
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