Thread Zahlen in Worten
(9 answers)
Opened by bianca at 2012-01-11 15:25
Ich hatte bei einer Fortbildung so was aus Langeweile geschrieben:
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 package ZahlZuWort; use strict; use warnings; use utf8; my @eins=qw(ein eine eins); my @null_zwoelf=qw(null ein zwei drei vier fünf sechs sieben acht neun zehn elf zwölf); my @zehn_neunzig=qw(null zehn zwanzig dreißig vierzig fünfzig sechzig siebzig achtzig neunzig); my $und='und'; my @hundert_billiarde= qw(hundert tausend million milliarde billion billiarde trillion); my @hundert_billiarde_anhang=("", "",qw( en n en n en)); #################################### # # use ZahlZuWort; # $string=ZahlZuWort::format($zahl); # #################################### sub format { my $wert=shift; $wert=~s/\D//gs; return undef if($wert!~/^\d+$/); #return undef if($wert+0 > 999999999999999); my @list=split(/(?<=\d)(?=(?:\d{3})+$)/,$wert); my $back=''; for my $cnt (0..$#list) { my $val=$list[$cnt]; my $mi=$hundert_billiarde[$#list-$cnt]; my $re=''; if($#list-$cnt>0) { if($val>1) { $mi.=$hundert_billiarde_anhang[$#list-$cnt]; $re=_hundert(int($val))."-".$mi; } elsif($val==1) { $re=$eins[$#list-$cnt>1?1:0]."-".$mi; } } else { $re=_hundert(int($val)); } $back.="-".$re; } $back=~s/-+/-/g; $back=~s/^-+//g; $back=~s/-+$//g; return $back; } sub _hundert { my $val=shift; my $ret=''; if($val<99) { $ret=_zehn($val); } else { my $f=substr($val,0,1,''); if($f==1) { $f=$eins[0]."-".$hundert_billiarde[0]; } else { $f=$null_zwoelf[$f]."-".$hundert_billiarde[0]; } $ret=$f."-"._zehn($val); } return $ret; } sub _zehn { my $val=shift; my $ret=''; return '' if($val<=0); if($val<13) { if($val==1) { $ret=$eins[2]; } else { $ret=$null_zwoelf[$val]; } } else { my $pre=substr($val,0,1,''); my $prepre=$null_zwoelf[$val]; $ret=($val?$prepre.'-'.($pre>1?$und.'-':''):'').$zehn_neunzig[$pre]; } return $ret; } 1; Das ist aber nur ein Hack. Benutze lieber ein Modul von Cpan. :-) |