Necesito que me mandes un programa para convertir números a letras. Gracias
1 respuesta
Respuesta de gaunmanuel
1
1
gaunmanuel, Desarrollador de sistemas, delphi, SQL Interbase, Oracle
Una recomendación, si deseas ser un buen programador en delphi, primero trata de hacerlo por tu mismo, trata de usar tu lógica, y si tienes problemas para resolver algo entonces si pide ayuda, pero la ayuda que sea según la lógica que llevas, y así tendrás mejores resultados, aquí te envío la función para realizar este proceso que requieres, quizá algunas cosas no funcionen bien, pero ahí esta la idea ya. Ok. 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;