http://www.perlmonks.org?node_id=166032


in reply to number 2 text

Hi,

(Now I call *this* node archaeology)

this is for german, very dumb. But a nice recursive aproach, suitable for numbers up to 999 999 999 with nice german grammar. Easily extendable.

sub de_number { my $positive = shift; my $out; my @tokens1 = qw(null ein zwei drei vier fünf sechs sieben acht ne +un zehn elf zwölf); my @tokens2 = qw(zwanzig dreissig vierzig fünfzig sechzig siebzig +achtzig neunzig hundert); # my @tokens3 = qw(million milliarde billion billiarde); # Not need +ed now if($positive >= 0 && $positive <= 12) { $out = $tokens1[$positive]; } elsif($positive >= 13 && $positive <= 19) { $out = $tokens1[$positive-10].'zehn'; } elsif($positive >= 20 && $positive <= 100) { my $one_idx = int $positive/10-2; my $ten_idx = $positive-($one_idx+2)*10; $out = $tokens1[$ten_idx].'und' if $ten_idx; $out .= $tokens2[$one_idx]; } elsif($positive >= 101 && $positive <= 999) { my $one_idx = int $positive/100; $out = $tokens1[$one_idx].'hundert'.&de_number($positive-$one_idx* +100); } elsif($positive >= 1000 && $positive <= 999999) { my $one_idx = int $positive/1000; my $tausend = $positive-$one_idx*1000; my $nonull = $tausend ? &de_number($tausend) : ''; $out = &de_number($one_idx).'tausend'.$nonull; } elsif($positive >= 1000000 && $positive <= 999999999) { my $one_idx = int $positive/1000000; my $mio = $positive-$one_idx*1000000; my $nonull = $mio ? ' '.&de_number($mio) : ''; my $one = $one_idx == 1 ? 'e' : ''; $out = &de_number($one_idx).$one.' million'; $out .= 'en' if $one_idx > 1; $out .= $nonull; } return $out; }

Bye
 PetaMem