Thread Runden auf zwei relevante Stellen?!
(8 answers)
Opened by Ronnie at 2008-09-24 23:49
Ich habe es mir nicht nehmen lassen auch was zu schreiben:
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #!/usr/bin/perl use strict; use warnings; my $signifikant=3; my $z="10.000000128536"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="10.000001117885000001100000"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="0.000000195675"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="0.1000000195675"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="1000.1399999"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="1000.00099999"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="1000.00090000019999"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="1000.99999"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="1099.99999"; print "$z --> ".round_significant($z,$signifikant)."\n"; $z="9999.9999999"; print "$z --> ".round_significant($z,$signifikant)."\n"; ########################################################## ########################################################## sub round_significant { my $zahl=shift; my $stelle=shift; if(my ($zv,$zn) = $zahl =~/^([\d\.]+0)([1-9]{$stelle})\d*?$/) { $zv.="0"x$stelle; $zn++; my $l=length($zn); substr($zv,-1*$l,$l,$zn); $stelle--; $zv=~s/(\.\d{$stelle,}[1-9]+)0+$/$1/; $zahl=$zv; } else { $zahl= sprintf("%.${stelle}f",$zahl); } return $zahl; } |