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) { $nachkomma = substr ($nachkomma,0,$stellen) + 1; if (length ($nachkomma) > $stellen) { $vorkomma ++; $nachkomma = ''; } else { $nachkomma = substr ($nachkomma,0,$stellen); } } else { $nachkomma = substr ($nachkomma,0,$stellen); } } } } return "$vorzeichen$vorkomma" . ($nachkomma ne '' ? ".$nachkomma" : ''); }