Código de FoxPro/Visual FoxPro - Conversión de Numeros a Letras

Conversión de Numeros a Letrasgráfica de visualizaciones


FoxPro/Visual FoxPro

estrellaestrellaestrellaestrellaestrella(15)
Publicado el 15 de Marzo del 2002 por Samuel Monjaraz Vázquez
28.803 visualizaciones desde el 15 de Marzo del 2002. Una media de 42 por semana
codigo, que se puede usar en Clipper y Visual Fox Pro, para la conversión de Numeros a Letras.
Como pueden ver es un procedimiento, pero pueden cambiar Procedure por Function y tendrian una función.

Versión 1
estrellaestrellaestrellaestrellaestrella(15)

Publicado el 15 de Marzo del 2002gráfica de visualizaciones de la versión: Versión 1
28.804 visualizaciones desde el 15 de Marzo del 2002. Una media de 42 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
*** Regresa numero en letras
Procedure NToLetra
Parameter numero
num_car = Str(numero,15,2)
num_dig = Subs(num_car,14,2)
pos = 1
Store "" To num_car_fin,leyenda
For t=1 To 4
	Store 0 To uni,dec,cen
	cen = Val(Subs(num_car,pos+0,1))
	dec = Val(Subs(num_car,pos+1,1))
	uni = Val(Subs(num_car,pos+2,1))
	pos = pos + 3
	letra3 = centena(uni,dec,cen)
	letra2 = decenas(uni,dec,cen)
	letra1 = unidads(uni,dec,cen)
	Do Case
		Case t=1
			leyenda = IIf(uni+dec+cen=1,"billon ",IIf(uni+dec+cen>1,"billones ",""))
		Case t=2
			leyenda = IIf(uni+dec+cen=1,"millon ",IIf(uni+dec+cen>1,"millones ",""))
		Case t=3
			leyenda = IIf(uni+dec+cen=1,"mil ",IIf(uni+dec+cen>1,"mil ",""))
		Case t=4
			leyenda = IIf(uni+dec+cen=1,"",IIf(uni+dec+cen>1,"",""))
	EndCase
	num_car_fin = num_car_fin + letra3 + letra2 + letra1 + leyenda
EndFor
num_1 = Val(Subs(num_car,1,12))
num_2 = Val(Subs(num_car,4,9))
num_3 = Val(Subs(num_car,7,6))
leyenda = ""
If num_1=1
	leyenda = " Peso "
Else
	If num_2=0 .Or. num_3=0
		leyenda = " de Pesos "
	Else
		leyenda = " Pesos "
	EndIf
EndIf
If num_1 = 0
	num_car_fin = "Cero "
	leyenda = "Pesos "
EndIf
num_car_fin = "(" + num_car_fin + leyenda + num_dig + "/100 m. n.)"
Return num_car_fin
 
** Unidades
Procedure unidads
Parameter uni,dec,cen
Do Case
	Case uni = 1 .And. dec#1
		ctexto = "Un "
	Case uni = 2 .And. dec#1
		ctexto = "Dos "
	Case uni = 3 .And. dec#1
		ctexto = "Tres "
	Case uni = 4 .And. dec#1
		ctexto = "Cuatro "
	Case uni = 5 .And. dec#1
		ctexto = "Cinco "
	Case uni = 6
		ctexto = "Seis "
	Case uni = 7
		ctexto = "Siete "
	Case uni = 8
		ctexto = "Ocho "
	Case uni = 9
		ctexto = "Nueve "
	OtherWise
		ctexto = ""
EndCase
Return ctexto
 
** Centenas
Procedure centena
Parameter uni,dec,cen
Do Case
	Case cen=1 .And. (dec=0 .And. uni=0)
		ctexto = "Cien "
	Case cen=1 .And. (dec>0 .Or. uni>0)
		ctexto = "Ciento "
	Case cen=2
		ctexto = "Doscientos "
	Case cen=3
		ctexto = "Trescientos "
	Case cen=4
		ctexto = "Cuatrocientos "
	Case cen=5
		ctexto = "Quinientos "
	Case cen=6
		ctexto = "Seiscientos "
	Case cen=7
		ctexto = "Setecientos "
	Case cen=8
		ctexto = "Ochocientos "
	Case cen=9
		ctexto = "Novecientos "
	OtherWise
		ctexto = ""
EndCase
Return ctexto
 
** Decenas
Procedure decenas
Parameter uni,dec,cen
Do Case
	Case dec=1 .and. uni=0
		ctexto = "Diez "
	Case dec=1 .and. uni=1
		ctexto = "Once "
	Case dec=1 .and. uni=2
		ctexto = "Doce "
	Case dec=1 .and. uni=3
		ctexto = "Trece "
	Case dec=1 .and. uni=4
		ctexto = "Catorce "
	Case dec=1 .and. uni=5
		ctexto = "Quince "
	Case dec=1 .and. (uni>5 .and. uni<10)
		ctexto = "Dieci"
	Case dec=2 .and. uni=0
		ctexto = "Veinte "
	Case dec=2 .and. uni>0
		ctexto = "Veinti"
	Case dec=3 .and. uni=0
		ctexto = "Treinta "
	Case dec=3 .and. uni>0
		ctexto = "Treinta y "
	Case dec=4 .and. uni=0
		ctexto = "Cuarenta "
	Case dec=4 .and. uni>0
		ctexto = "Cuarenta y "
	Case dec=5 .and. uni=0
		ctexto = "Cincuenta "
	Case dec=5 .and. uni>0
		ctexto = "Cincuenta y "
	Case dec=6 .and. uni=0
		ctexto = "Sesenta "
	Case dec=6 .and. uni>0
		ctexto = "Sesenta y "
	Case dec=7 .and. uni=0
		ctexto = "Setenta "
	Case dec=7 .and. uni>0
		ctexto = "Setenta y "
	Case dec=8 .and. uni=0
		ctexto = "Ochenta "
	Case dec=8 .and. uni>0
		ctexto = "Ochenta y "
	Case dec=9 .and. uni=0
		ctexto = "Noventa "
	Case dec=9 .and. uni>0
		ctexto = "Noventa y "
	OtherWise
		ctexto = ""
EndCase
Return ctexto



Comentarios sobre la versión: Versión 1 (15)

tony
15 de Marzo del 2002
estrellaestrellaestrellaestrellaestrella
funciona muy bien, cambiando algunas sentencias se puede utilizar en vb.excelente.........
Responder
Alejandro
22 de Mayo del 2002
estrellaestrellaestrellaestrellaestrella
Soy un nuevo programador de visual fox pro, asi es que no soy muy chongón.
Quiero poner en un cuadro de texto una variable con la cual hará la conversion pero no se como utilizar el codigo; lo pongo en un botón y sale error.
Quisiera que me ayudaran
Responder
Cesar
28 de Mayo del 2002
estrellaestrellaestrellaestrellaestrella
Esta muy bueno, hasta ahora solo vi el codigo, pero parece que cuando lo implemente va a funcionar. Luego cuando lo pruebe volvere a valorar.
Responder
Francisco
18 de Junio del 2002
estrellaestrellaestrellaestrellaestrella
Muy bueno, y funciona correctamente con clipper 5.2
NOTA para los Españoles:
He modificado un poco el código para que funcione con Euros:
A continuación paso el código testeado con clipper 5.2:

*************************** INICIO CODIGO *****************************
SET FIXED ON
SET DECIMALS TO 2
NUMERO := 0
*** Regresa numero en letras
DO WHILE .T.
CLS
@1,1 SAY "DIME NUMERO: " GET NUMERO
READ
IF LASTKEY()=27
QUIT
ENDIF
@ 2,2 SAY NTOLETRA(NUMERO)
INKEY(0)
ENDDO


Procedure NToLetra
Parameter numero
num_car = Str(numero,15,2)
num_dig = Subs(num_car,14,2)
pos = 1
Store "" To num_car_fin,leyenda
For t=1 To 4
Store 0 To uni,dec,cen
cen = Val(Subs(num_car,pos+0,1))
dec = Val(Subs(num_car,pos+1,1))
uni = Val(Subs(num_car,pos+2,1))
pos = pos + 3
letra3 = centena(uni,dec,cen)
letra2 = decenas(uni,dec,cen)
letra1 = unidads(uni,dec,cen)
Do Case
Case t=1
leyenda = IIf(uni+dec+cen=1,"BILLON ",IIf(uni+dec+cen>1,"BILLONES ",""))
Case t=2
leyenda = IIf(uni+dec+cen=1,"MILLON ",IIf(uni+dec+cen>1,"MILLONES ",""))
Case t=3
leyenda = IIf(uni+dec+cen=1,"MIL ",IIf(uni+dec+cen>1,"MIL ",""))
Case t=4
leyenda = IIf(uni+dec+cen=1,"",IIf(uni+dec+cen>1,"",""))
EndCase
if numero>=1000 .and. numero<2000
num_car_fin = num_car_fin + letra3 + letra2 + leyenda
else
num_car_fin = num_car_fin + letra3 + letra2 + letra1 + leyenda
endif
EndFor
num_1 = Val(Subs(num_car,1,12))
num_2 = Val(Subs(num_car,4,9))
num_3 = Val(Subs(num_car,7,6))
leyenda = ""
If num_1=1
leyenda = "Euro "
Else
If num_2=0 .Or. num_3=0
leyenda = " de euros "
Else
leyenda = " euros "
EndIf
EndIf
If num_1 = 0
num_car_fin = "Cero "
// leyenda = "Euros "
EndIf
// le a¤adimos los decimales para que funciona con el euro
if val (num_dig)> 0
decim1 := Val(Subs(num_dig,1,1))
decim2 := Val(Subs(num_dig,2,1))
letdec1 := decenas(decim2,decim1,0)
letdec2 := unidads(decim2,decim1,0)
leyenda := leyenda +"CON "+letdec1+letdec2+" CÉNTIMOS"
endif
num_car_fin = num_car_fin + leyenda

Return num_car_fin

** Unidades
Procedure unidads
Parameter uni,dec,cen
Do Case
Case uni = 1 .And. dec#1
ctexto = "UNO "
Case uni = 2 .And. dec#1
ctexto = "DOS "
Case uni = 3 .And. dec#1
ctexto = "TRES "
Case uni = 4 .And. dec#1
ctexto = "CUATRO "
Case uni = 5 .And. dec#1
ctexto = "CINCO "
Case uni = 6
ctexto = "SEIS "
Case uni = 7
ctexto = "SIETE "
Case uni = 8
ctexto = "OCHO "
Case uni = 9
ctexto = "NUEVE "
OtherWise
ctexto = ""
EndCase
Return ctexto

** Centenas
Procedure centena
Parameter uni,dec,cen
Do Case
Case cen=1 .And. (dec=0 .And. uni=0)
ctexto = "CIEN "
Case cen=1 .And. (dec>0 .Or. uni>0)
ctexto = "CIENTO "
Case cen=2
ctexto = "DOSCIENTOS "
Case cen=3
ctexto = "TRESCIENTOS "
Case cen=4
ctexto = "CUATROCIENTOS "
Case cen=5
ctexto = "QUINIENTOS "
Case cen=6
ctexto = "SEISCIENTOS "
Case cen=7
ctexto = "SETECIENTOS "
Case cen=8
ctexto = "OCHOCIENTOS "
Case cen=9
ctexto = "NOVECIENTOS "
OtherWise
ctexto = ""
EndCase
Return ctexto

** Decenas
Procedure decenas
Parameter uni,dec,cen
Do Case
Case dec=1 .and. uni=0
ctexto = "DIEZ "
Case dec=1 .and. uni=1
ctexto = "ONCE "
Case dec=1 .and. uni=2
ctexto = "DOCE "
Case dec=1 .and. uni=3
ctexto = "TRECE "
Case dec=1 .and. uni=4
ctexto = "CATORCE "
Case dec=1 .and. uni=5
ctexto = "QUINCE "
Case dec=1 .and. (uni>5 .and. uni<10)
ctexto = "DIECI"
Case dec=2 .and. uni=0
ctexto = "VEINTE "
Case dec=2 .and. uni>0
ctexto = "VENTI"
Case dec=3 .and. uni=0
ctexto = "TREINTA "
Case dec=3 .and. uni>0
ctexto = "TREINTA Y "
Case dec=4 .and. uni=0
ctexto = "CUARENTA "
Case dec=4 .and. uni>0
ctexto = "CUARENTA Y "
Case dec=5 .and. uni=0
ctexto = "CINCUENTA "
Case dec=5 .and. uni>0
ctexto = "CINCUENTA Y "
Case dec=6 .and. uni=0
ctexto = "SESENTA "
Case dec=6 .and. uni>0
ctexto = "SESENTA Y "
Case dec=7 .and. uni=0
ctexto = "SETENTA "
Case dec=7 .and. uni>0
ctexto = "SETENTA Y "
Case dec=8 .and. uni=0
ctexto = "OCHENTA "
Case dec=8 .and. uni>0
ctexto = "OCHENTA Y "
Case dec=9 .and. uni=0
ctexto = "NOVENTA "
Case dec=9 .and. uni>0
ctexto = "NOVENTA Y "
OtherWise
ctexto = ""
EndCase
Return ctexto
*************************** FIN CODIGO *****************************

Responder
ken
02 de Julio del 2002
estrellaestrellaestrellaestrellaestrella
Bastante bien, me sirvio, pero tuve que hacerle algunos pequeñitos cambios para que se adapte a mi moneda.
Responder
Pepe Mendez
20 de Septiembre del 2002
estrellaestrellaestrellaestrellaestrella
Muy buena se puede adaptar a varios leguajes, voy intentar en visual basic espero poder hacerlo, luego estare comentandolos.
Responder
Eduardo Cifuentes
25 de Septiembre del 2002
estrellaestrellaestrellaestrellaestrella
Gracias por publicarlo, me ahorraste varias horas, lo modifique para delphi6 y funciona muy bien. ¡¡¡¡¡¡
Responder
pablo torres
06 de Enero del 2003
estrellaestrellaestrellaestrellaestrella
esta muy bien el programa pero en los numeros que terminan en 11, 12, 13 , 14 y 15 no lo convierte correctamente
Responder
Nelson Tesorero
24 de Abril del 2003
estrellaestrellaestrellaestrellaestrella
excelente código
puedes ejecutarlo desde otro progrma así
*****************************************************************************
SET PROCEDURE TO "convertir.prg"
clear
numero = 1
do while numero <> 0
input " Ingrese el monto (salir con 0) " to numero
clear
? str(numero) + " = " + NToLetra(numero)
enddo
Responder
Juan Diego García
25 de Octubre del 2004
estrellaestrellaestrellaestrellaestrella
Funciona OK!
Responder
oskarchido
18 de Septiembre del 2007
estrellaestrellaestrellaestrellaestrella
espewro que me ayude este codigo.,.... esta bien echa... pero para los primcipiantes alomejor seria bueno poner todas las in çstruccione.s.. pero ta chido...ok
Responder
Patrick Flores
26 de Noviembre del 2007
estrellaestrellaestrellaestrellaestrella
Muy buena funcion, mis respetos
Responder
Jomel
21 de Septiembre del 2012
estrellaestrellaestrellaestrellaestrella
Muchas gracias por el codigo esta bueno, lo revisare y con tu permiso si en algo puedo colaborar con algunas cosas posteo una posible actualizacion en caso de que halla algun bug. Pero por lo demas muy bueno y para latinoamerica y lugares que trabajan con dolar solo es cuestion de cambiar lo que dice Peso por Dolar ó Pesos por Dolares.. muy bueno
Responder
Jomel
22 de Septiembre del 2012
estrellaestrellaestrellaestrellaestrella
Corregido y trabajando al 100%


Parameter numero
PRIVATE mil, pos, t
num_car = Str(numero,15,2)
num_dig = Subs(num_car,14,2)
pos = 1

Store "" To num_car_fin,leyenda
For t=1 To 4
Store 0 To uni,dec,cen
cen = Val(Subs(num_car,pos+0,1))
dec = Val(Subs(num_car,pos+1,1))
uni = Val(Subs(num_car,pos+2,1))
pos = pos + 3
letra3 = centena(uni,dec,cen)
letra2 = decenas(uni,dec,cen)
letra1 = unidads(uni,dec,cen)
Do Case
Case t=1
leyenda = IIf(uni+dec+cen=1,"billon ",IIf(uni+dec+cen>1,"billones ",""))
Case t=2
leyenda = IIf(uni+dec+cen=1,"millon ",IIf(uni+dec+cen>1,"millones ",""))
Case t=3
leyenda = IIf(uni+dec+cen=1,"mil ",IIf(uni+dec+cen>1,"mil ",""))
Case t=4
leyenda = IIf(uni+dec+cen=1,"",IIf(uni+dec+cen>1,"",""))
EndCase

num_car_fin = num_car_fin + letra3 + letra2 + letra1 + leyenda

EndFor

num_1 = Val(Subs(num_car,1,12))
num_2 = Val(Subs(num_car,4,9))
num_3 = Val(Subs(num_car,7,6))
leyenda = ""
If num_1=1
leyenda = " Dolar con "
Else
If num_2=0 .Or. num_3=0
leyenda = " de Dolares con "
Else
leyenda = " Dolares con "
EndIf
EndIf
If num_1 = 0
num_car_fin = "Cero "
leyenda = "dolares con"
EndIf
num_car_fin = num_car_fin + leyenda + num_dig + "/100"
Return UPPER(num_car_fin)

** Unidades
Procedure unidads
Parameter uni,dec,cen

Do Case
Case uni = 1 .And. (dec = 0 AND cen = 0) AND (pos+2) > 12
ctexto = "Un "
Case uni = 1 .And. (dec > 0 or cen > 0)
ctexto = "Un "
Case uni = 2
ctexto = "Dos "
Case uni = 3
ctexto = "Tres "
Case uni = 4
ctexto = "Cuatro "
Case uni = 5
ctexto = "Cinco "
Case uni = 6
ctexto = "Seis "
Case uni = 7
ctexto = "Siete "
Case uni = 8
ctexto = "Ocho "
Case uni = 9
ctexto = "Nueve "
OtherWise
ctexto = ""
EndCase
Return ctexto

** Centenas
Procedure centena
Parameter uni,dec,cen
Do Case
Case cen=1 .And. (dec=0 .And. uni=0)
ctexto = "Cien "
Case cen=1 .And. (dec>0 .Or. uni>0)
ctexto = "Ciento "
Case cen=2
ctexto = "Doscientos "
Case cen=3
ctexto = "Trescientos "
Case cen=4
ctexto = "Cuatrocientos "
Case cen=5
ctexto = "Quinientos "
Case cen=6
ctexto = "Seiscientos "
Case cen=7
ctexto = "Setecientos "
Case cen=8
ctexto = "Ochocientos "
Case cen=9
ctexto = "Novecientos "
OtherWise
ctexto = ""
EndCase
Return ctexto

** Decenas
Procedure decenas
Parameter uni,dec,cen
Do Case
Case dec=1 .and. uni=0
ctexto = "Diez "
Case dec=1 .and. uni=1
ctexto = "Once "
Case dec=1 .and. uni=2
ctexto = "Doce "
Case dec=1 .and. uni=3
ctexto = "Trece "
Case dec=1 .and. uni=4
ctexto = "Catorce "
Case dec=1 .and. uni=5
ctexto = "Quince "
Case dec=1 .and. (uni>5 .and. uni<10)
ctexto = "Dieci"
Case dec=2 .and. uni=0
ctexto = "Veinte "
Case dec=2 .and. uni>0
ctexto = "Veinti"
Case dec=3 .and. uni=0
ctexto = "Treinta "
Case dec=3 .and. uni>0
ctexto = "Treinta y "
Case dec=4 .and. uni=0
ctexto = "Cuarenta "
Case dec=4 .and. uni>0
ctexto = "Cuarenta y "
Case dec=5 .and. uni=0
ctexto = "Cincuenta "
Case dec=5 .and. uni>0
ctexto = "Cincuenta y "
Case dec=6 .and. uni=0
ctexto = "Sesenta "
Case dec=6 .and. uni>0
ctexto = "Sesenta y "
Case dec=7 .and. uni=0
ctexto = "Setenta "
Case dec=7 .and. uni>0
ctexto = "Setenta y "
Case dec=8 .and. uni=0
ctexto = "Ochenta "
Case dec=8 .and. uni>0
ctexto = "Ochenta y "
Case dec=9 .and. uni=0
ctexto = "Noventa "
Case dec=9 .and. uni>0
ctexto = "Noventa y "
OtherWise
ctexto = ""
EndCase
Return ctexto
Responder
Leoncio Barrios
20 de Septiembre del 2013
estrellaestrellaestrellaestrellaestrella
Muy buena, gracias por el aporte, me sirvió de mucho. También tuve que hacerles unos pequeñísimos ajustes para mi moneda.

Gracias nuevamente!!!!
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s150