Einzelnen Beitrag anzeigen

moonwhaler

Registriert seit: 22. Dez 2005
57 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Eine Zahl in Aussprache umwandeln...

  Alt 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!
  Mit Zitat antworten Zitat