Código de FoxPro/Visual FoxPro - Función para convertir números a letras

Versión 1
estrellaestrellaestrellaestrellaestrella(21)

Publicado el 28 de Agosto del 2002gráfica de visualizaciones de la versión: Versión 1
44.005 visualizaciones desde el 28 de Agosto del 2002
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
Function Convnum(Total)
  * Autor: Anselmo Antonio Ortiz Alcocer
  Dimension aUnidades(9), aDecenas(14), aCentenas(10)
  aUnidades(1) = 'UN'
  aUnidades(2) = 'DOS'
  aUnidades(3) = 'TRES'
  aUnidades(4) = 'CUATRO'
  aUnidades(5) = 'CINCO'
  aUnidades(6) = 'SEIS'
  aUnidades(7) = 'SIETE'
  aUnidades(8) = 'OCHO'
  aUnidades(9) = 'NUEVE'
  aDecenas(1) = 'DIEZ'
  aDecenas(2) = 'ONCE'
  aDecenas(3) = 'DOCE'
  aDecenas(4) = 'TRECE'
  aDecenas(5) = 'CATORCE'
  aDecenas(6) = 'QUINCE'
  aDecenas(7) = 'VEINTE'
  aDecenas(8) = 'TREINTA'
  aDecenas(9) = 'CUARENTA'
  aDecenas(10) = 'CINCUENTA'
  aDecenas(11) = 'SESENTA'
  aDecenas(12) = 'SETENTA'
  aDecenas(13) = 'OCHENTA'
  aDecenas(14) = 'NOVENTA'
  aCentenas(1) = 'CIEN'
  aCentenas(2) = 'DOSCIENTOS'
  aCentenas(3) = 'TRESCIENTOS'
  aCentenas(4) = 'CUATROCIENTOS'
  aCentenas(5) = 'QUINIENTOS'
  aCentenas(6) = 'SEISCIENTOS'
  aCentenas(7) = 'SETECIENTOS'
  aCentenas(8) = 'OCHOCIENTOS'
  aCentenas(9) = 'NOVECIENTOS'
 
  vTotal = str(int(Total), 12)
 
  Do case
    Case empty(val(vTotal))
      Texto = 'CERO PESOS'
 
    Case val(vTotal) = 1
      Texto = 'UN PESO'
 
    Otherwise
      tCientos     = obt_cant(substr(vTotal,10,3))
      tMiles       = obt_cant(substr(vTotal,7,3))
      tMillones    = obt_cant(substr(vTotal,4,3))
      tMilMillones = obt_cant(substr(vTotal,1,3))
 
      tCientos = tCientos
      tMiles = iif(empty(tMiles), '', ;
               iif(tMiles='UN', '', tMiles + ' ') + 'MIL ')
      tMillones = iif(empty(tMillones), '', ;
               tMillones + ' MILLON' + iif(tMillones='UN', ' ', 'ES ') +;
               iif(empty(tMiles + tCientos), 'DE', ''))
      tMilMillones = iif(empty(tMilMillones), '', ;
               iif(tMilMillones='UN', '', tMilMillones + ' ') + 'MIL ' +;
               iif(empty(tMillones), 'MILLONES ', ' ') +;
               iif(empty(tMillones + tMiles + tCientos), 'DE', ''))
 
      Texto = strtran(tMilMillones + tMillones + tMiles + tCientos, '  ', ' 
') + ' PESOS'
  Endcase
 
Return Texto + iif(!empty(Total), ' CON ' + strtran(transform(int((total - 
int(total)) * 100), '**'), '*', '0') + '/100 M.N.', '')
 
Function obt_cant(valor)
  Public Unidades, Decenas, Centenas
 
  If empty(val(valor))
    Return ''
  Endif
 
  Store '' to tUnidades, tDecenas, tCentenas
  Unidades = int(val(substr(valor,3,1))) &&          123
  Decenas  = int(val(substr(valor,2,1))) && vTotal = 999
  Centenas = int(val(substr(valor,1,1))) &&          ^^^
  valor = int(val(valor))
 
  tUnidades = iif(!empty(unidades), aUnidades(Unidades), '')
 
  If !empty(decenas)
    If decenas = 1
      tDecenas = iif(val(right(str(valor,3),2)) >= 10 and
val(right(str(valor,3),2)) <= 15, aDecenas(val(right(str(valor,3),2)) - 9),
'DIECI' + tUnidades)
      tUnidades = ''
    Else
      tDecenas = aDecenas(decenas + 5)
      if !empty(unidades)
        * QUITAR LOS ASTERISCOS SI NO NOS GUSTA QUE CONVIERTA
        * 35 COMO TREINTICINCO SINO COMO TREINTA Y CINCO...
        *If Decenas <= 2
          tDecenas = left(tDecenas, len(tDecenas) - 1) + 'I'
        *Else
        *  tDecenas = tDecenas + ' Y '
        *Endif
 
      Endif
    Endif
  Endif
 
  If !empty(centenas)
    tCentenas = aCentenas(centenas)
    If valor > 100
      If centenas = 1
        tCentenas = tCentenas + 'TO '
      Else
        tCentenas = tCentenas + ' '
      Endif
    Endif
  Endif
 
Return tCentenas + tDecenas + tUnidades



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

27 de Octubre del 2002
estrellaestrellaestrellaestrellaestrella
sabes a mi enseñaron un codigo pero en visual basic es un poco mas corto pero con limitacion, probare tu codigo
Responder
13 de Marzo del 2003
estrellaestrellaestrellaestrellaestrella
Buenisimo, ya lo probe y funciona muy bien
Responder
29 de Octubre del 2004
estrellaestrellaestrellaestrellaestrella
El código de programación esta un con una lógica, para mi perfecta.
No lo puede hacer correr porque manejo mas la programación con PROCEDURE y no con FUNCTION. Tendré que pegarle una revisada algún manual para verlo funcionar. Exelente trabajo amigo.

Arturo Solis
Hermosillo, Sonora; México.
Responder
30 de Noviembre del 2004
estrellaestrellaestrellaestrellaestrella
Muy bueno, yo hice uno en dBase IV hace como 10 años y es muy muy parecido al tuyo. Lo hice en base a procedures con variables publicas y no con function, con function es mas comodo.
Responder
27 de Octubre del 2006
estrellaestrellaestrellaestrellaestrella
muy bueno, si funciona y bien
Responder
18 de Agosto del 2008
estrellaestrellaestrellaestrellaestrella
Corre muy Bien y la logica de programacion esta planeada correctamente. bien por eso amigo haaa y Gracias
Responder
Carlos Humberto Ballesteros
13 de Junio del 2017
estrellaestrellaestrellaestrellaestrella
Me puedes ayudar como correr este programa, tengo un formulario con un text. que suma unos valores y ese total quiero que se despiegue en letras en otro Text.. Como hacerlo?
Responder
17 de Noviembre del 2009
estrellaestrellaestrellaestrellaestrella
Muy bien por la ayuda, me encontraba limitado por un falta de un codigo como el que usted desarrollo, muchas gracias

Responder
6 de Octubre del 2011
estrellaestrellaestrellaestrellaestrella
Excelente!!! gracias
Responder
17 de Octubre del 2011
estrellaestrellaestrellaestrellaestrella
Revisaré el código amigo, muchas gracias, excelente!!!.
Responder
17 de Octubre del 2011
estrellaestrellaestrellaestrellaestrella
Funciona Excelente. Como referencia para futuros foreros esta función deja su resultado en la variable Texto. Por aquello, se puede invocar la función como M.MontoLetra = ConvNum(MontoNumer), donde MontoNumer es del tipo Numerico. Buenos un 100 para este COMPA. Y nuevamente GRACIAS
Responder
hugo rios
12 de Noviembre del 2014
estrellaestrellaestrellaestrellaestrella
Muy bien,capisimo
Responder
YURY
26 de Marzo del 2015
estrellaestrellaestrellaestrellaestrella
Excelente, funciona al 100%. Muchas gracias
Responder
Jorge
24 de Julio del 2015
estrellaestrellaestrellaestrellaestrella
Buenos dias, soy muy novato, quise probar pero me aparece el mensaje :
Methods and events cannot contain nested procedures or class definitions, me podrias auxiliar, gracias
Responder
Tachito
22 de Julio del 2016
estrellaestrellaestrellaestrellaestrella
amigos.. accedi a este conversor de numeros a textos.. pero como lo ejecuto..? probando de estas formas no me funciona; por ejemplo ? convnum(n) donde n contiene el valor a convertir tamben de esta forma cTexto = convnum(n) y tampoco.. una ayudita..?
Gracias
Responder
iSaac Gallardo
21 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
no convierte las cantidades que tiene 17,16,18,19 ahi manda error, o sea le falta explezar esas cantidades
Responder
Imágen de perfil
22 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
Buenas tardes, soy nuevo en visual fox pro, el codigo presente lo guardo en prg y luego lo llamo desde el init del formulario con SET PROCEDURE TO libreria.prg luego x=convnum(thisform.text1.value)
pero me salen error en el codigo programado cuando ejecuto el formulario.
por favor alguie que me pueda aclarar este problema.
gracias.
Responder
Juanki
15 de Diciembre del 2016
estrellaestrellaestrellaestrellaestrella
Si haz realizado un copiar y pegar asegúrate que cada linea de programación que se ha pegado en tu .prg este bien, suele pasar que al copiar y pegar las lineas de código se separen. Lo otro es que debes de asegurarte de que el valor del thisform.text1.value este siendo pasado como numérico.
Responder
Johnny
7 de Abril del 2017
estrellaestrellaestrellaestrellaestrella
Muy bueno el código, funciona excelente, 100 puntos
Responder
Imágen de perfil
7 de Agosto del 2017
estrellaestrellaestrellaestrellaestrella
Muchas gracias por el aporte....
Responder
José Luis Silva
10 de Enero del 2020
estrellaestrellaestrellaestrellaestrella
Muchas Gracias .... me sacaste de un apurto rapido !!!!
Responder

Comentar la versión: Versión 1

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

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s293