Convertir Números a Letras (Visual FoxPro)

Quisiera saber la manera de convertir los datos numéricos que tengo en un textbox (text1), en letras en otro textbox (text2), es decir, que al escribir un numero (por ejemplo:125) en un textbox, me aparezca en otro textbox que esta abajo [del anterior] el valor en letras (ciento veinticinco). Estaba sonando que lo podía hacer en mi form y desperté y me surgió la inquietud y salte de la cama a preguntar! Jajajaja! Saludos! Ravenn!
Respuesta
1
Esta es la función que ocupo para transformar los números a letras pasando los parámetros de cantidad y tipo, Tipo solo para que devuelva 00/100 como una cantidad en dinero.
FUNCTION literal
PARAMETERS cantidad,tipo
* cantidad : La cantidad a ser convertida m ximo 12 caracteres
private cantid,j,c,cad,long,l,trc,dg1,dg,c,m
cantid=str(cantidad,12,2)
j=7
c=1
cad=""
long=9
l=1
do case
   case cantidad=1000000
        cad='un millon '
   case cantidad=1000
        cad='mil '
   case cantidad=0
        cad='cero '
otherwise
        do while l<>0
           trc=substr(cantid,j,3)
           dg1=val(substr(trc,2,1))
           dg=val(right(trc,2))
           dgm=val(right(trc,3))
           if dg<>0
              if dg1=1
                 do case
                    case dg=10
                         cad='diez '+cad
                    case dg=11
                         cad='once '+cad
                    case dg=12
                         cad='doce '+cad
                    case dg=13
                         cad='trece '+cad
                    case dg=14
                         cad='catorce '+cad
                    case dg=15
                         cad='quince '+cad
                    case dg=16
                         cad='dieciseis '+cad
                    case dg=17
                         cad='diecisiete '+cad
                    case dg=18
                         cad='dieciocho '+cad
                    case dg=19
                         cad='diecinueve '+cad
                 endcase
              else
                 dg=val(right(trc,1))
                 if dg<>0
                    do case
                       case dg=1
                            cad='un '+cad
                       case dg=2
                            cad='dos '+cad
                       case dg=3
                            cad='tres '+cad
                       case dg=4
                            cad='cuatro '+cad
                       case dg=5
                            cad='cinco '+cad
                       case dg=6
                            cad='seis '+cad
                       case dg=7
                            cad='siete '+cad
                       case dg=8
                            cad='ocho '+cad
                       case dg=9
                            cad='nueve '+cad
                    endcase
                    if dg1<>0.and.dg1<>2
                       cad='y '+cad
                    endif
                 endif
              endif
              do case
                 case dg1=2
                      if dg=0
                         cad='veinte '+cad
                      else
                         cad='veinti'+cad
                      endif
                 case dg1=3
                      cad='treinta '+cad
                 case dg1=4
                      cad='cuarenta '+cad
                 case dg1=5
                      cad='cincuenta '+cad
                 case dg1=6
                      cad='sesenta '+cad
                 case dg1=7
                      cad='setenta '+cad
                 case dg1=8
                      cad='ochenta '+cad
                 case dg1=9
                      cad='noventa '+cad
              endcase
           endif
           dg1=val(left(trc,1))
           do case
              case dg1=1
                   if dgm=100
                      cad='cien '+cad
                   else
                      cad='ciento '+cad
                   endif
              case dg1=2
                   cad='docientos '+cad
              case dg1=3
                   cad='trecientos '+cad
              case dg1=4
                   cad='cuatrocientos '+cad
              case dg1=5
                   cad='quinientos '+cad
              case dg1=6
                   cad='seiscientos '+cad
              case dg1=7
                   cad='setecientos '+cad
              case dg1=8
                   cad='ochocientos '+cad
              case dg1=9
                   cad='novecientos '+cad
           endcase
           c=c+1
           long=long-3
           if val(substr(cantid,1,long))=0
              l=0
           else
              do case
                 case c=2
                      j=4
                      cad='mil '+cad
                 case c=3
                      j=1
                      if val(right(cantid,6))=0
                         cad='millones '
                      else
                         cad='millones '+cad
                      endif
                 case c=4
                      l=0
              endcase
           endif
        enddo
endcase
if substr(cantid,9,1)='1'.and.substr(cantid,8,2)<>'11'
   cad=substr(cad,1,len(cad)-1)+'o '
endif
m=left(cad,1)
if tipo=0
   cad=upper(m)+substr(cad,2,len(cad))+right(cantid,3)+"/100"
else
   cad=upper(m)+substr(cad,2,len(cad)) 
endif     
return cad
Debes poner todo esto en un prg (ejm Librerias.prg)
En el form INIT
set proce to libreria.prg
Y para usarlo
x=literal(Thisform.text1.value,0)
Hola! Tengo 2 preguntas y de verdad disculpa ignorancia! 1. Seguí tus orientaciones, cuando ejecuto en el form me manda un mensaje Fuction Argument is Invalid y senala la parte: cantid=str(cantidad, 12,2). ¿Qué hice mal? 2. Donde ubico la parte para usarlo, x=literal(Thisform.text1.value, ¿0) esto donde lo ubico? Probé en el text! Pero no estoy seguro donde ponerlo! Saludos!
en un prg es decir un archivo.prg y luego en el form indicar q usas ese prg como libreria , la cantidad no debes pasrla como caracter es decir x=literal(123,1) asi tal vez el contenido de text1 es de type caracter no numeral. Pra indicar q trabajaras con el prg en el init del form deberas poner
Set procedure to nombredelprg

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas