Thread Auf 2. Kommastelle runden?
(31 answers)
Opened by Gast at 2008-05-07 02:31 2009-12-11T05:59:55 bianca Oha stimmt. Bei anderen Sachen klappt es auch nicht. Seltsam, dass mir das bisher nicht aufgefallen ist... Also hier die überarbeitete Version: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 sub round { my $zahl=shift; return undef unless(defined($zahl)); my $stelle=shift || 0; # prepare for Xe[+-]Y Notation # handle big float my ($pre,$number,$exponent)=$zahl=~/^([-+]?)(\d+\.?\d*)(?:e([+-]?\d+))?$/; $exponent=0 unless defined($exponent); $pre='' if(!$pre || $pre ne '-'); # full integer zz with exponent my ($l)=$number=~/\.(.+)$/; $l=$l?length($l):0; $exponent-=$l; $number=~y/.//d; # correct position for round my $stellen=$stelle+$exponent; if($stellen<0) { $exponent=-$stelle; my $add=substr(('0'x abs($stellen)).sprintf("%.0f",$number),$stellen,-$stellen); # round... $number+=$add; $number=('0'x abs($stellen)).sprintf("%.0f",$number); substr($number,$stellen,-$stellen,''); } # reconstruct number $zahl="$pre${number}e$exponent"; return $zahl+0; } Das sollte mit allem klar kommen... hoffe ich mal :-) EDIT: kleinen Fehler beseitigt. Last edited: 2009-12-11 21:56:42 +0100 (CET) |