Mega Code Archive

 
Categories / Delphi / Algorithm Math
 

How to convert an interger in its textual equivalence

Title: How to convert an interger in its textual equivalence function Zahl2Wort(Zahl: Integer): string; const coZehnerWoerter: array [1..9] of string = ('zehn', 'zwan', 'drei', 'vier', 'f¨¹nf', 'sech', 'sieb', 'acht', 'neun'); coEinerWoerter: array [1..9] of string = ('ein', 'zwei', 'drei', 'vier', 'f¨¹nf', 'sechs', 'sieben', 'acht', 'neun'); {------------------------------------------------------------------------------} function GetGroup(aHunderter, aZehner, aEiner, GroupIndex: Integer): string; begin Result := ''; if aHunderter 0 then begin Result := coEinerWoerter[aHunderter] + 'hundert' end; if aEiner 0 then begin if (aZehner = 1) and (aEiner = 1) then begin if aHunderter 0 then Result := Result + 'undelf' else Result := Result + 'elf'; end else if (aZehner = 1) and (aEiner = 2) then begin if aHunderter 0 then Result := Result + 'undzw?lf' else Result := Result + 'zw?lf'; end else Result := Result + coEinerWoerter[aEiner]; end; if (aZehner 0) and not ((aZehner = 1) and ((aEiner = 2) or (aEiner = 1))) then begin if aZehner 1 then Result := Result + 'und'; if aZehner = 3 then Result := Result + coZehnerWoerter[aZehner] + '?ig' else Result := Result + coZehnerWoerter[aZehner]; if (aZehner 1) and not (aZehner = 3) then Result := Result + 'zig' end; case GroupIndex of 1: begin if (aEiner = 1) and (aZehner = 0) then Result := Result + 's'; end; 2: Result := Result + 'tausend'; 3: begin if (aEiner = 1) and (aZehner = 0) and (aHunderter = 0) then Result := Result + 'emillionen' else Result := Result + 'millionen'; end; 4: begin if (aEiner = 1) and (aZehner = 0) and (aHunderter = 0) then Result := Result + 'emilliarde' else Result := Result + 'milliarden'; end; end; end; {------------------------------------------------------------------------------} var Einer, Zehner, Hunderter, GroupCount, ZahlLength: Integer; Dummy: string; begin Result := ''; Dummy := IntToStr(Zahl); ZahlLength := Length(Dummy); GroupCount := StrToInt(FloatToStr(RoundUp(ZahlLength / 3, 0))); while (Length(Dummy) mod 3) 0 do Dummy := '0' + Dummy; while GroupCount 0 do begin Hunderter := StrToInt(Copy(Dummy, 1, 1)); System.Delete(Dummy, 1, 1); Zehner := StrToInt(Copy(Dummy, 1, 1)); System.Delete(Dummy, 1, 1); Einer := StrToInt(Copy(Dummy, 1, 1)); System.Delete(Dummy, 1, 1); Result := Result + GetGroup(Hunderter, Zehner, Einer, GroupCount); Dec(GroupCount); end; Result[1] := Char(Ord(Result[1]) - 32); end;