Estoy realizando un programa, y necesito convertir números a letras, por ejemplo 1234 a mil doscientos treinta y cuatro.
1 Respuesta
Respuesta de antipauli
1
1
antipauli, Analista/Programador de Sistemas Oracle
Útil para rellenar los impresos de giros de correos, por ejemplo procedure TForm1.Button1Click(Sender: TObject); function xIntToLletras(Numero:LongInt):String; function xxIntToLletras(Valor:LongInt):String; const aUnidad : array[1..15] of String = ('UN','DOS','TRES','CUATRO','CINCO','SEIS', 'SIETE','OCHO','NUEVE','DIEZ','ONCE','DOCE', 'TRECE','CATORCE','QUINCE'); aCentena: array[1..9] of String = ('CIENTO','DOSCIENTOS','TRESCIENTOS', 'CUATROCIENTOS','QUINIENTOS','SEISCIENTOS', 'SETECIENTOS','OCHOCIENTOS','NOVECIENTOS'); aDecena : array[1..9] of String = ('DIECI','VEINTI','TREINTA','CUARENTA','CINCUENTA', 'SESENTA','SETENTA','OCHENTA','NOVENTA'); var Centena, Decena, Unidad, Doble: LongInt; Linea: String; begin if valor=100 then Linea:=' CIEN ' else begin Linea:=''; Centena := Valor div 100; Doble := Valor - (Centena*100); Decena := (Valor div 10) - (Centena*10); Unidad := Valor - (Decena*10) - (Centena*100); if Centena>0 then Linea := Linea + Acentena[centena]+' '; if Doble>0 then begin if Doble=20 then Linea := Linea +' VEINTE ' else begin if doble<16 then Linea := Linea + aUnidad[Doble] else begin Linea := Linea +' '+ Adecena[Decena]; if (Decena>2) and (Unidad<>0) then Linea := Linea+' Y '; if Unidad>0 then Linea := Linea + aUnidad[Unidad]; end; end; end; end; Result := Linea; end; var Millones,Miles,Unidades: Longint; Linea : String; begin {Inicializamos el string que contendrá las letras según el valor numérico} if numero=0 then Linea := 'CERO' else if numero<0 then Linea := 'MENOS ' else if numero=1 then begin Linea := 'UN'; xIntToLletras := Linea; exit end else if numero>1 then Linea := ''; {Determinamos el Nº de millones, miles y unidades de numero en positivo} Numero := Abs(Numero); Millones := numero div 1000000; Miles := (numero - (Millones*1000000)) div 1000; Unidades := numero - ((Millones*1000000)+(Miles*1000)); {Vamos poniendo en el string las cadenas de los números(llamando a subfuncion)} if Millones=1 then Linea:= Linea + ' UN MILLON ' else if Millones>1 then Linea := Linea + xxIntToLletras(Millones) + ' MILLONES '; if Miles =1 then Linea:= Linea + ' MIL ' else if Miles>1 then Linea := Linea + xxIntToLletras(Miles)+ ' MIL '; if Unidades >0 then Linea := Linea + xxIntToLletras(Unidades); xIntToLletras := Linea; end; begin Label1.Caption:= xIntToLletras(StrToInt(Edit1.Text)); end; -------------------------------------------------------------------------------- Enviado por: Luis Moreno (lmoreno@retemail.es) He convertido a Delphi un antigua rutina mía escrita en C, que realiza el mismo cometido que la aquí expuesta, pero con algunas mejoras, como: Bilingüe: Soporta Castellano y Catalán Euro: Soporta número con decimales (2), así como expresar el texto en masculino y en femenino: no es lo mismo TREINTA Y UNO (Euros) que TREINTA Y UNA (Ptas). Aunque parezca un poco larga, he preferido dejarla así pero ganar en claridad (**************************************) (* Conversión Número -> Letra *) (* *) (* Parámetros: *) (* *) (* mNum: Número a convertir *) (* iIdioma: Idioma de conversión *) (* 1 -> Castellano