this slowpoke moves

Convert Numbers to Words

Das folgende Beispiel zeigt, wie man Zahleneinträge in Wörter umwandeln und als String darstellen kann.

Hier wird in Deutsch und in Englisch umgewandelt, es kann aber jede beliebige Sprache angewendet werden, soweit man die Sprache beherrscht und der Unicode für die Sprache vorhanden ist.
function ZahlToString(z: LongInt): string;
  function ZahlBis19(za:LongInt): string;
  begin
    case za of
      0: result:='null';
      1: result:='ein';
      2: result:='zwei';
      3: result:='drei';
      4: result:='vier';
      5: result:='fünf';
      6: result:='sechs';
      7: result:='sieben';
      8: result:='acht';
      9: result:='neun';
      10: result:='zehn';
      11: result:='elf';
      12: result:='zwölf';
      13: result:='dreizehn';
      14: result:='vierzehn';
      15: result:='fünfzehn';
      16: result:='sechzehn';
      17: result:='siebzehn';
      18: result:='achtzehn';
      19: result:='neunzehn';
    end;
  end;

  function ZahlBis99(za: LongInt): string;
  begin
    case za of
      1..19: result:=ZahlBis19(za);
      20: result:='zwanzig';
      21..29: result:=ZahlBis19(za-(za div 10)*10)+'undzwanzig';
      30: result:='dreisig';
      31..39: result:=ZahlBis19(za-(za div 10)*10)+'unddreisig';
      40: result:='vierzig';
      41..49: result:=ZahlBis19(za-(za div 10)*10)+'undvierzig';
      50:result:='fünfzig';
      51..59: result:=ZahlBis19(za-(za div 10)*10)+'undfünfzig';
      60:result:='sechzig';
      61..69: result:=ZahlBis19(za-(za div 10)*10)+'undsechzig';
      70: result:='siebzig';
      71..79: result:=ZahlBis19(za-(za div 10)*10)+'undsiebzig';
      80: result:='achzig';
      81..89: result:=ZahlBis19(za-(za div 10)*10)+'undachzig';
      90: result:='neunzig';
      91..99: result:=ZahlBis19(za-(za div 10)*10)+'undneunzig';
    end;
  end;

  function ZahlBis999(za: LongInt): string;
  begin
    case za of
      0..99: result:=zahlbis99(za);
      100: result:='einhundert';
      101..199: result:='einhundert und '+Zahlbis99(za-100);
      200: result:='zweihundert';
      201..299: result:='zweihundert und '+Zahlbis99(za-200);
      300: result:='dreihundert';
      301..399: result:='dreihundert und '+Zahlbis99(za-300);
      400: result:='vierhundert';
      401..499: result:='vierhundert und '+Zahlbis99(za-400);
      500: result:='fünfhundert';
      501..599: result:='fünfhundert und '+Zahlbis99(za-500);
      600: result:='sechshundert';
      601..699: result:='sechshundert und '+Zahlbis99(za-600);
      700: result:='siebenhundert';
      701..799: result:='siebenhundert und '+Zahlbis99(za-700);
      800: result:='achthundert';
      801..899: result:='achthundert und '+Zahlbis99(za-800);
      900: result:='neunhundert';
      901..999: result:='neunhundert und '+Zahlbis99(za-900);
    end;
  end;

var za:longInt;
begin
  result:='';
  if z<0 then
  begin
    result:='minus ';
    z:=abs(z);
  end;
  if z=1 then
  begin
    Result:=result+'eins';
    exit;
  end;
  za:=z;
  if za div 1000000000 > 0 then
  begin
    if za div 1000000000=1 then
      result:='eine Milliarde '
    else
      result:=Zahlbis999(za div 1000000000)+' Milliarden ';
      za:=za - (za div 1000000000)*1000000000;
  end;
  if za div 1000000 > 0 then
  begin
    if za div 1000000=1 then
      result:=result +'eine Million '
    else
      result:=result+Zahlbis999(za div 1000000)+' Millionen ';
    za:=za - (za div 1000000)*1000000;
  end;
  if za div 1000 > 0 then
  begin
    if za div 1000=1 then
      result:=result +'ein Tausend '
    else
      result:=result+Zahlbis999(za div 1000)+' Tausend ';
    za:=za - (za div 1000)*1000;
  end;
  if za > 0 then
  begin
    result:=result+Zahlbis999(za)+' ';
    za:=za - (za div 100)*100;
  end;
end;
 function ZahlToStringEnglish(z: LongInt): string;
  function ZahlBis19(za: LongInt): string;
  begin
    case za of
      0: result:='zero';
      1: result:='one';
      2: result:='two';
      3: result:='three';
      4: result:='four';
      5: result:='five';
      6: result:='six';
      7: result:='seven';
      8: result:='eight';
      9: result:='nine';
      10: result:='ten';
      11: result:='eleven';
      12: result:='twelve';
      13: result:='thirdteen';
      14: result:='fourteen';
      15: result:='fifteen';
      16: result:='sixteen';
      17: result:='seventeen';
      18: result:='eightteen';
      19: result:='nineteen';
    end;
  end;

  function ZahlBis99(za: LongInt): string;
  begin
    case za of
      1..19: result:=ZahlBis19(za);
      20: result:='twenty';
      21..29: result:='twenty-'+ZahlBis19(za-(za div 10)*10);
      30: result:='thirty';
      31..39: result:='thirty-'+ZahlBis19(za-(za div 10)*10);
      40: result:='forty';
      41..49: result:='forty-'+ZahlBis19(za-(za div 10)*10);
      50: result:='fifty';
      51..59: result:='fifty-'+ZahlBis19(za-(za div 10)*10);
      60 :result:='sixty';
      61..69: result:='sixty-'+ZahlBis19(za-(za div 10)*10);
      70: result:='seventy';
      71..79: result:='seventy-'+ZahlBis19(za-(za div 10)*10);
      80: result:='eighty';
      81..89: result:='eighty-'+ZahlBis19(za-(za div 10)*10);
      90: result:='ninety';
      91..99: result:='ninety-'+ZahlBis19(za-(za div 10)*10);
    end;
  end;

  function ZahlBis999(za: LongInt): string;
  begin
    case za of
      0..99: result:=zahlbis99(za);
      100: result:='one hundred';
      101..199: result:='one hundred and '+Zahlbis99(za-100);
      200: result:='two hundred';
      201..299: result:='two hundred and '+Zahlbis99(za-200);
      300: result:='three hundred';
      301..399: result:='three hundred '+Zahlbis99(za-300);
      400: result:='four hundred';
      401..499: result:='four hundred '+Zahlbis99(za-400);
      500: result:='five hundred';
      501..599: result:='five hundred and '+Zahlbis99(za-500);
      600: result:='six hundred';
      601..699: result:='six hundred and '+Zahlbis99(za-600);
      700: result:='seven hundred';
      701..799: result:='seven hundred and '+Zahlbis99(za-700);
      800: result:='eight hundred';
      801..899: result:='eight hundred and '+Zahlbis99(za-800);
      900: result:='nine hundred';
      901..999: result:='nine hundred and '+Zahlbis99(za-900);
    end;
  end;

var za:longInt;
begin
  result:='';
  if z<0 then
  begin
    result:='minus ';
    z:=abs(z);
  end;
  if z=1 then
  begin
    Result:=result+'one';
    exit;
  end;
  za:=z;
  if za div 1000000000 > 0 then
  begin
    if za div 1000000000=1 then
      result:='one billion '
    else
      result:=Zahlbis999(za div 1000000000)+' billion ';
    za:=za - (za div 1000000000)*1000000000;
  end;
  if za div 1000000 > 0 then
  begin
    if za div 1000000=1 then
      result:=result +'one million '
    else
      result:=result+Zahlbis999(za div 1000000)+' million ';
    za:=za - (za div 1000000)*1000000;
  end;
  if za div 1000 > 0 then
  begin
    if za div 1000=1 then
      result:=result +'one thousend '
    else
      result:=result+Zahlbis999(za div 1000)+' thousend ';
    za:=za - (za div 1000)*1000;
  end;
  if za > 0 then
  begin
    result:=result+Zahlbis999(za)+' ';
    za:=za - (za div 100)*100;
  end;
end;
Beispiel :
procedure TForm1.Button1Click(Sender: TObject);
begin
	Edit1.Text := ZahlToString(strtoint(edit1.Text));
	Edit2.Text := ZahlToStringEnglish(strtoint(edit2.Text));
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate