Thread Kaufmännisch korrekt runden
(67 answers)
Opened by bianca at 2009-12-11 07:14 2009-12-13T13:18:56 topeg Hab ich probiert, dann wird hinter dem Komma mit Nullen aufgefüllt bis Stellenzahl erreicht ist. Ich glaub, am Ende nehme ich doch lieber meinen eigenen Ansatz, der macht auch diesen Fall richtig. Inzwischen sieht mein Ansatz so aus, kann man vielleicht noch geschwindigkeitsoptimieren, ist aber bei sämtlichen Werten fehlerfrei: 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 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) { if (substr ($nachkomma,0,$stellen) eq '9' x $stellen) { $vorkomma ++; $nachkomma = ''; } else { my ($count) = $nachkomma =~ m!^(0*)!; my $vornull = length $count; $vornull -- if substr ($nachkomma,0,$stellen) eq '0' x $stellen; my $temp = substr ($nachkomma,0,$stellen) + 1; $nachkomma = ($vornull ? '0' x $vornull : '') . $temp; } } else { $nachkomma = substr ($nachkomma,0,$stellen); } } } } $vorkomma =~ s/^0+([^0])/$1/; $nachkomma =~ s/0+$//; return ("$vorkomma.$nachkomma" / 1 ? $vorzeichen : '') . "$vorkomma" . ($nachkomma ne '' && substr ($nachkomma,0,$stellen) ne '0' x $stellen ? ".$nachkomma" : ''); 10 print "Hallo"
20 goto 10 |