Thread Kaufmännisch korrekt runden
(67 answers)
Opened by bianca at 2009-12-11 07:14 2009-12-11T09:47:58 Dubu Erwischt! Mist. Korrektur, geht aber bestimmt eleganter, oder? 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 sub kfmrunden { # # Aufruf: # ======= # my $gerundet = &kfmrunden([wert],[stellen]); # [wert] = Nur nummerische Werte! Keine Extremwerte wie z.B. 1e+100 oder 4.24306121591708e-007! Kein Komma, kein Tausenderpunkt etc. # [stellen] = Anzahl gewünschte Nachkommastellen, zwischen 0 und 9 zulässig # my $wert = shift (@_) || 0; my $stellen = shift (@_) || 0; my $vorzeichen = ''; my $vorkomma = 0; my $nachkomma = ''; if ($stellen >= 0 && $stellen <= 9 && !($wert =~ /[^+-\.0-9]/)) { if (substr ($wert,0,1) eq '-' || substr ($wert,0,1) eq '+') { $vorzeichen = '-' if substr ($wert,0,1) eq '-'; $wert = substr ($wert,1); } ($vorkomma,$nachkomma) = split /\./,$wert; $vorkomma = 0 unless $vorkomma; $nachkomma = '' unless $nachkomma; if (length ($nachkomma) > $stellen) { my $auf = (substr ($nachkomma,$stellen,1) > 4 ? 1 : 0); if (!$stellen) { $vorkomma ++ if $auf; $nachkomma = ''; } else { if ($auf) { my $vornull = 0; for (my $z = 0; $z < $stellen; $z ++) { last if substr ($nachkomma,$z,1) ne '0'; $vornull ++; } if (substr ($nachkomma,0,$stellen) eq '9' x $stellen) { $vorkomma ++; $nachkomma = ''; } else { $vornull -- if substr ($nachkomma,$stellen - 1,1) eq '0'; my $temp = substr ($nachkomma,0,$stellen) + 1; $nachkomma = ($vornull ? '0' x $vornull : '') . $temp; } } else { $nachkomma = substr ($nachkomma,0,$stellen); } } } } return ("$vorkomma.$nachkomma" / 1 ? $vorzeichen : '') . "$vorkomma" . ($nachkomma ne '' && substr ($nachkomma,0,$stellen) ne '0' x $stellen ? ".$nachkomma" : ''); } EDIT: Code nochmal angepaßt, 0.00 und -0.0 als Ergebnisse rausgenommen. Last edited: 2009-12-11 11:42:02 +0100 (CET) 10 print "Hallo"
20 goto 10 |