Registriert seit: 22. Dez 2005
57 Beiträge
Delphi 5 Enterprise
|
Re: Eine Zahl in Aussprache umwandeln...
19. Jun 2007, 10:44
Super. Genau das, was ich gesucht habe! Danke. Ich habe das Beispiel in der Fundgrube nochmal erweitert (geht jetzt bis Billiarden (wers braucht) und neu formatiert - zum Spaß.
Delphi-Quellcode:
// Original code by Georg W. Seefried
// Modified by Christian Petersen
function ZahlInString( n: Int64 ): String;
const
Zahlen1: array[0..9] of String =
( '', 'zehn', 'zwan', 'drei', 'vier', 'fünf', 'sech', 'sieb', 'ach', 'neun' );
Zahlen: array[0..9] of String =
( '', 'ein', 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun' );
var
n100, n10, n1: integer;
s: String;
function ZehnerUndEiner( n10, n1: byte ): String;
var
n: Int64;
begin
n := n10 * 10 + n1;
Result := '';
if ( n10 = 0 ) then
begin
if ( n1 > 0 ) then
result := result + zahlen[n1];
if ( n1 = 1 ) then
result := result + 's';
end else
begin
if ( n10 = 1 ) then
begin
if ( n = 11 ) then
result := result + 'elf'
else if ( n = 12 ) then
result := result + 'zwölf'
else
result := result + Zahlen1[n1] + 'zehn';
end else
begin
result := result + Zahlen[n1];
if ( n1 > 0 ) then
result := result + 'und';
result := result + Zahlen1[n10];
if ( n10 <> 3 ) then
result := result + 'zig'
else
result := result + 'ßig';
end;
end;
end; {ZehnerUndEiner}
begin
result := '';
if ( n = 0 ) then
begin
result := 'null';
exit;
end;
if ( n >= 1000000000000000 ) then
begin
s := ZahlInString( n DIV 1000000000000000 );
if ( s = 'eins' ) then
result := result + 'einebilliarde'
else
result := result + s + 'billiarden';
n := n MOD 1000000000;
end;
if ( n >= 1000000000000 ) then
begin
s := ZahlInString( n DIV 1000000000000 );
if ( s = 'eins' ) then
result := result + 'einebillion'
else
result := result + s + 'billionen';
n := n MOD 1000000000;
end;
if ( n >= 1000000000 ) then
begin
s := ZahlInString( n DIV 1000000000 );
if ( s = 'eins' ) then
result := result + 'einemilliarde'
else
result := result + s + 'milliarden';
n := n MOD 1000000000;
end;
if ( n >= 1000000 ) then
begin
s := ZahlInString( n DIV 1000000 );
if ( s = 'eins' ) then
result := result + 'einemillion'
else
result := result + s + 'millionen';
n := n MOD 1000000;
end;
if ( n >= 1000 ) then
begin
s := ZahlInString( n DIV 1000 );
if ( s = 'eins' ) then
s := 'ein';
result := result + s + 'tausend';
n := n MOD 1000;
end;
n100 := n DIV 100;
n := n MOD 100;
n10 := n DIV 10;
n1 := n MOD 10;
if ( n100 <> 0 ) then
result := result + Zahlen[n100] + 'hundert';
result := result + ZehnerUndEiner( n10, n1 );
end;
Viele Grüße!
|
|
Zitat
|