Delphi - Convertir numeros a letras

 
Vista:

Convertir numeros a letras

Publicado por Juan Pilco (9 intervenciones) el 07/05/2008 01:31:03
Hola amigos del foro

Soy nuevo en delphi y quisiera que alguien pueda ayudarme con una dudita

Estoy haciendo un programita de tarea y tengo que imprimir una cantidad numérica en letras, por ejemplo así

Si coloco 145 debe imprimir CIENTO CUARENTA Y CINCO 00/100 DOLERES.

Ayúdenme con eso porfa.

saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Convertir numeros a letras

Publicado por coso (7 intervenciones) el 07/05/2008 13:43:20
Te explico un metodo pero deberas implementarlo correctamente tu (vamos, q escribo codigo solo para que cojas la idea):

var
cien_miles, diez_miles, miles, centenas, decenas, unidades : int;

cien_miles := numero_origen DIV 100000;
numero_origen := numero_origen MOD 100000;

diez_miles := numero_origen DIV 10000;
numero_origen := numero_origen MOD 10000;

miles := numero_origen DIV 1000;
numero_origen := numero_origen MOD 1000;

centenas := numero_origen DIV 100;
numero_origen := numero_origen MOD 100;

decenas := numero_origen DIV 10;
numero_origen := numero_origen MOD 10;

unidades := numero_origen;

esta parte anterior seguro q la puedes optimizar usando un array, aunque es mas facil de leer y luego de trabajar usando variables concretas para cada caso.

una vez teniendo las unidades, centenas, miles etc... deberas ir usando 'cases'

var
cien_miles_str, diez_miles_str,miles_str, centenas_str, decenas_str, unidades_str : string;

case cien_miles of
1 : cien_miles_str := 'CIENTO ';
2 : cien_miles_str := 'DOSCIENTOS';
3 : cien_miles_str := 'TRESCIENTOS'
4 : ...

...

case decenas of
1 : decenas_str := 'DIECI';
2 : decenas_str := 'VEINTI';
3 : decenas_str := 'TREINTA';
4 : decenas_str := 'CUARENTA';
...

case unidades of
1 : unidades_str := 'UNO';
2 : unidades_str := 'DOS';
...

y juntar las str, usando nexos para casos concretos ( te pongo solo el caso de entre decenas y unidades)

var
entre_decenas_y_unidades : string;

if (decenas_str <> 'DIEZ') and (decenas_str <> 'VEINTI') and (decenas_str <> 'VEINTE) and (unidades_str <> '') then entre_decenas_y_unidades := ' y ' else entre_decenas_y_unidades := '';

y al final

numero_ordinal := cien_miles_str + diez_miles_str + entre_diez_miles_y_miles_str + miles_str + centenas_str + decenas_str + entre_decenas_y_unidades_str + unidades_str;

como ves, deberas trabajar mucho los casos concretos (por ejemplo, en el caso de que decenas sea 1 y unidades sea entre 0 y 5 deberas no usar unidades_str y directamente poner decenas_str := ' QUINCE' o decenas_str := 'TRECE', por ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir numeros a letras

Publicado por Eva (484 intervenciones) el 08/05/2008 16:51:05
En Trucomanía, el truco 260 lo tienes ya hecho

http://www.q3.nu/trucomania/truco.cgi?260&esp

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir numeros a letras

Publicado por Juan Pilco (9 intervenciones) el 09/05/2008 01:34:39
Holaaaaaaaa!

Gracias coso me ayudo mucho el ejemplo que pusiste gracias también a Eva
pero tengo una dudita mas, como ago para los decimales para q me imprima así
por ejemplo

TREINTA 50/100

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir numeros a letras

Publicado por maxzama (2 intervenciones) el 10/04/2015 17:25:24
Hola a todos.

Necesito también pasar de numero a letras.

Por lo que e leído de los comentarios por otras paginas. Se tiene que instalar un componente o paquete.

Como se llama este componente o paquete, y donde puedo encontrarlo?

_____________________________________________

E creado varias funciones entre ellas: unidades, centena, decenas, cantidad y centavos. Aun así no se como empezar.

en el siguiente mensaje les coloco mi codigo para que me ayuden, por favor.

____________________________________________

Y Eva: el hilo que avías montado me da Error 404, página no encontrada. podrías montarlo nuevamente. Por favor.

Herramientas en uso:

Delphi XE2

Espero sus respuesta por Favor y Gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Convertir numeros a letras

Publicado por maxzama (2 intervenciones) el 10/04/2015 17:28:31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
function Unidades(numero:Integer): String;
     begin
       case numero of
         0: Result:='';
         1: if FMasculino
            then Result:='UN'
            else Result:='UNA';
         2: Result:='DOS';
         3: Result:='TRES';
         4: Result:='CUATRO';
         5: Result:='CINCO';
         6: Result:='SEIS';
         7: Result:='SIETE';
         8: Result:='OCHO';
         9: Result:='NUEVE';
       end;
     end;
 
 
function Decenas(numero:integer): String;
     begin
       Case numero of
         0:Result:='';
         1..9:Result:=Unidades(numero);
         10: Result:='DIEZ';
         11: Result:='ONCE';
         12: Result:='DOCE';
         13: Result:='TRECE';
         14: Result:='CATORCE';
         15: Result:='QUINCE';
         16: Result:='DIECISEIS';
         17: Result:='DIECISIETE';
         18: Result:='DIECIOCHO';
         19: Result:='DIECINUEVE';
         20: Result:='VEINTE';
         21,24,25,27..29: Result:='VEINTI'+Unidades(numero mod 10);
         22: Result:='VEINTIDOS';
         23: Result:='VEINTITRES';
         26: Result:='VEINTISEIS';
         30: Result:='TREINTA';
         40: Result:='CUARENTA';
         50: Result:='CINCUENTA';
         60: Result:='SESENTA';
         70: Result:='SETENTA';
         80: Result:='OCHENTA';
         90: Result:='NOVENTA';
         else Result:=Decenas(numero - numero mod 10)+' y '+ unidades(numero mod 10);
       end;
     end;
 
function Centenas(numero:integer): String;
     begin
       case numero of
         0: Result:='';
         1..99: Result:=Decenas(numero);
         100: Result:='CIEN';
         101..199: Result:='CIENTO '+Decenas(numero mod 100);
         500: if FMasculino
              then Result:='QUINIENTOS '
              else Result:='QUINIENTAS ';
         700: if FMasculino
              then Result:='SETECIENTOS '
              else Result:='SETECIENTAS ';
         900: if FMasculino
              then Result:='NOVECIENTOS '
              else Result:='NOVECIENTAS ';
         501..599,
         701..799,
         901..999: Result:= Centenas(numero - numero mod 100)+Decenas(numero mod 100);
         else if FMasculino
              then Result:=Unidades(numero div 100)+'CIENTOS'+' '+Decenas(numero mod 100)
              else Result:=Unidades(numero div 100)+'CIENTAS'+' '+Decenas(numero mod 100);
       end;
     end;
 
function CorrigeTexto(Frase: String): String;
     var
       P: Integer;
     begin
       Result:= LowerCase(Frase);
       P:= Pos('  ', Result);
       while P > 0 do begin
         Delete(Result, P, 1);
         P:= Pos('  ', Result);
       end;
     end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar