Auf x-Stellen runden
Alex
- perl
0 Wolfgang Wiese0 Wolfgang Wiese0 Alex
0 Calocybe0 Frank Schönmann0 Wolfgang Wiese0 Calocybe0 AlexBausW
Moin,
ich hab bestimmt wieder so ne Frage, die schon zig-mal gestellt wurde:
Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)
Im Archiv hab ich auf Anhieb leider nichts gefunden! :(
Danke im Vorraus
-Alex
Hi,
ich hab bestimmt wieder so ne Frage, die schon zig-mal gestellt wurde:
»» Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)
Im Archiv hab ich auf Anhieb leider nichts gefunden! :(
Nur mal so ungestetet hingeschrieben..:
sub Runden {
my $wert = $_[0];
my $helper = int($wert);
if (($wert-$helper) >= 0.5) {
$helper++;
}
return $helper;
}
Ciao,
Wolfgang
Hi,
wo ich deinen Text nochmal lese, frag ich mich ob ich ihn
falsch verstanden hab?
Willst du Zahlen aufrunden/abrunden, oder nur auf x Kommastellen kuerzen?
Bei letzterem musst du halt sowas in der Art einbauen:
$gekuerzt = int($zahl*(10*$stellen))/(10*$stellen);
Ciao,
Wolfgang
Hi,
wo ich deinen Text nochmal lese, frag ich mich ob ich ihn
falsch verstanden hab?
Willst du Zahlen aufrunden/abrunden, oder nur auf x Kommastellen kuerzen?Bei letzterem musst du halt sowas in der Art einbauen:
$gekuerzt = int($zahl*(10*$stellen))/(10*$stellen);
Ciao,
»» Wolfgang
auf x-Stellen RUNDEN, d.h. ich hab z.b. 7,4567
die Ergebnis wuerden dann sein:
7,457
7,46
7,5
7
Aber danke fuer die Tips, ich werd'S mal versuchen!
-Alex
Hallo!
sub Runden {
my $wert = $_[0];
my $helper = int($wert);if (($wert-$helper) >= 0.5) {
$helper++;
}
return $helper;
}
Dasselbe in kurz: $rounded = int($wert + 0.5);
Bin mir jetzt aber nicht sicher, ob das mit negativen Zahlen auch hinhaut.
Zum Runden auf x Stellen: <http://www.activestate.com/ActivePerl/docs/lib/Pod/perlfaq4.html#does perl have a round() function what about ceil() and floor() trig functions>
So lange
Hi,
Dasselbe in kurz: $rounded = int($wert + 0.5);
»
Warum einfach, wenn es auch umstaendlich geht?
Also ich finde mein Code sieht einfach mehr Sexy aus ;)
Ciao,
Wolfgang
hi!
ich hab bestimmt wieder so ne Frage, die schon zig-mal gestellt wurde:
»» Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)
Im Archiv hab ich auf Anhieb leider nichts gefunden! :(
Die Antwort auf dieses Problem steht in der Forumsauslese.
<../../sfausles/tsfa_tef.htm#a1>
bye, Frank!
ps. Bitte Probleme, die in der Auslese behandelt werden, nur noch mit Links darauf beantworten.
Hi,
ps. Bitte Probleme, die in der Auslese behandelt werden, nur noch mit Links darauf beantworten.
Warum?
Sollen diejenigen, die schneller drin sind zu antworten und HELFEN wollen nun
dadurch bestraft werden, indem sie die nichtgetanene Sucharbeit des Fragestellers nachholen sollen, nur
um einen exakten Link zu bekommen?
Wenn du einen pädagigischen Effekt anstreben willst, von wegen, das die
Leute endlich lernen sollen, die FAQs/Auslesen/Artikel zu lesen, dann ist der doch
sowieso schon durch die Fragestellung ad Akta.
Aber gut. Vielleicht sollte man wie in den Newsgroups wohl nur noch
in den EInheitsgesang einklingen und jeden niedermachen mit den Satz "Lies die FAQ!".
Na dann gute Nacht Forum.
Ciao,
Wolfgang
Hi Frank!
ps. Bitte Probleme, die in der Auslese behandelt werden, nur noch mit Links darauf beantworten.
Sorry, wusste nicht, dass das dort schon steht. Ok, ich geb's zu, ich hab die Auslese immer noch nicht auswendig gelernt. ;-)
Hinweis: Zwei Beitraege drunter ist ein Fehler: CR hat den ASCII-Wert 13, nicht 15. 015 ist die oktale Darstellung davon.
So lange
Hallo Frank,
»» Wie runde ich mit Perl auf x-Stellen (oder auf ganze Zahlen...)
Die Antwort auf dieses Problem steht in der Forumsauslese.
<../../sfausles/tsfa_tef.htm#a1>
Ich hab` mir unverschämterweise erlaubt <g>, die Vorschläge von Calocybe und Wolfgang zu einer kleinen Subroutine zusammenzufassen, die für negative wie positive Zahlen funktioniert, und auf beliebig viele Stellen rundet:
sub Round ($ $) {
return int($_[0] * 10**(defined $_[1] ? $_[1] : 0) + ($_[0] >= 0 ? +0.5 : -0.5)) / 10**(defined $_[1] ? $_[1] : 0);
}
Es tut mir allerdings leid, daß ich momentan total auf Einzeiler abfahre ;-)
Ein wenig weniger kryptisch ;-) ist folgendes:
sub Round ($ $) {
my ($num, $len) = @_;
$len = 0 unless defined $len;
my $add = $num >= 0 ? +0.5 : -0.5;
my $rounded = int($num * 10**$len + $add) / 10**$len;
return $rounded;
}
Vielleicht ersetzt das ja mal die Version in der Auslese :-)
Gruß AlexBausW
P.S.: Das ganze ist ohne Gewähr, funktioniert aber zumindest bei mir ;-)