Thread Auf 2. Kommastelle runden? (31 answers)
Opened by Gast at 2008-05-07 02:31

topeg
 2009-12-12 10:37
#129249 #129249
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
die Funktion hatte Probleme wenn man '.123' übergab.
Habe ich korrigiert.
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.]+)(?: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";
  #$zahl=sprintf("%.${stelle}f",$zahl);
  return $zahl+0;
}

View full thread Auf 2. Kommastelle runden?