1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
sub format_money { my $self = shift; my $string = shift; my ($euro,$cent); if($string =~m/\./){ ($euro,$cent) = split(/\./,$string); }else{ ($euro,$cent) = ($string,0); } my $money = $self->format_num($euro) . ',' . sprintf("%.2d", $cent); return $money; } sub format_num { my $self = shift; my $num = shift; return $num if(length($num) < 4); my $reverse = reverse($num); $reverse =~ s/(\d{3})/$1./g; $num = reverse($reverse); $num =~ s/^\.//; return $num; }
Quote17.06.2004
Q: Eine Zeichenkette nach zwei Zeichen (Zeichen gruppieren) zu spliten - wie geht das?
$var = "1234567890";
@var = split /??Ausdruck??/, $var;
Das Ergebnis sollte sein:
@var = (12,34,56,78,90);
A:
$var =~ s/(\d\d)(?=\d)(?!\d*\,)/$1,/g;
@var = split(',', $var);
Vielen Dank f�r diesen Code an Helmut, er ist oft im SELFForum (http://forum.de.selfhtml.org/) zu finden.
Hier ist noch ein interessanter Code, von Helmut (aus dem SELFForum):
Q: Wie kann ich Tausender Trennpunkte vor einem Komma einsetzen?
A:
$var = "123457890765498543298,3322";
$text = reverse $var;
$text =~ s/(\d\d\d)(?=\d)(?!\d*\,)/$1./g;
print scalar reverse $text;
# Ausgabe: 123.457.890.765.498.543.298,3322
2011-08-23T19:29:47 kristianJepp, die Lösung mit der Regex hätte ich eigentlich von Moritz erwartet, da warst du halt schneller ;-)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
sub format_money { my $self = shift; my $string = shift; my ($euro,$cent); if($string =~m/\./){ ($euro,$cent) = split(/\./,$string); }else{ ($euro,$cent) = ($string,0); } my $money = $self->format_num($euro) . ',' . sprintf("%.2d", $cent); return $money; } sub format_num { my $self = shift; my $num = shift; $num =~ s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1./g; return $num; }
print $u->format_money('zawanzig'); # zawanzig,00