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
#!/usr/bin/perl -w use 5.010; use strict; print "\n"; my $zahl = -3.9983629; my $stellen = 3; my $rnd = &roundmy ( $zahl, $stellen ); print "Ergebnis $rnd\n"; sub roundmy { my $za = shift; my $st = shift; $za = abs($za); my $rest = ( $za =~ /.(\d+)$/ ); if ( $1 ) { my $mult = '1'; if ( length($1) > $st ) { for ( 1..$st ) { $mult .= '0' } my $erg = int (($za * $mult) + .5) / $mult; } } } print "\n";
2012-01-16T21:22:02 hlubenowOder siehst Du einen besonderen Grund, das nicht so zu machen?
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
sub kfmrunden { 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.]+)(?:e([+-]?\d+))?$/; $exponent=0 unless defined($exponent); $pre='' if(!$pre || $pre ne '-'); # full integer number with exponent my ($l)=$number=~/\.(.+)$/; $exponent-=$l?length($l):0; $number=~y/.//d; # correct position for round my $stellen=$stelle+$exponent; if($stellen<0) { $exponent=-$stelle; my $add=substr(('0'x abs($stellen)).$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"; # format number if($zahl==0) { $zahl='0'; } else { $zahl=sprintf("%.${stelle}f",$zahl); $zahl=~s/\.?0+$// if(index($zahl,'.')>0) } return $zahl; }
2012-01-16T20:11:45 hugenynIrgendwo habe ich etwas über Probleme mi der int-Funktion gelesen, weiß aber nicht mehr was und wie.