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

Función para convertir números a letrasgráfica de visualizaciones


FoxPro/Visual FoxPro

estrellaestrellaestrellaestrellaestrella(16)
Publicado el 28 de Agosto del 2002 por Anselmo Antonio Ortiz Alcocer
33.420 visualizaciones desde el 28 de Agosto del 2002. Una media de 49 por semana
Función que convierte un valor númerico es su equivalente en letras. Limitado a un valor no superior a 999,999,999,999.99

Versión 1
estrellaestrellaestrellaestrellaestrella(16)

Publicado el 28 de Agosto del 2002gráfica de visualizaciones de la versión: Versión 1
33.421 visualizaciones desde el 28 de Agosto del 2002. Una media de 49 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
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 (16)

jackeline
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
Jaime Muñoz
13 de Marzo del 2003
estrellaestrellaestrellaestrellaestrella
Buenisimo, ya lo probe y funciona muy bien
Responder
Arturo Solis
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
David
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
Paco
27 de Octubre del 2006
estrellaestrellaestrellaestrellaestrella
muy bueno, si funciona y bien
Responder
Wolf Crazy
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
Aristobulo Torres
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
william
06 de Octubre del 2011
estrellaestrellaestrellaestrellaestrella
Excelente!!! gracias
Responder
César Delgado Flores
17 de Octubre del 2011
estrellaestrellaestrellaestrellaestrella
Revisaré el código amigo, muchas gracias, excelente!!!.
Responder
César Delgado Flores
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
yersson
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

Comentar la versión: Versión 1

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

http://lwp-l.com/s293