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" : '');