FoxPro/Visual FoxPro - Número a Texto

 
Vista:

Número a Texto

Publicado por Vicky (7 intervenciones) el 19/10/2009 20:10:32
Existe la posibilidad de transformar un número, por ej 20, a su expresión de texto, en este ejemplo, "veinte"? Lo necesito para un informe de recibo, en el q tengo que poner el importe en letras. Gracias!
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
sin imagen de perfil
Val: 29
Ha aumentado su posición en 3 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Número a Texto

Publicado por Chucho (271 intervenciones) el 19/10/2009 20:47:14
Hola:
Fijate en:
http://www.lawebdelprogramador.com/codigo/codigo.php?idp=150&id=34&texto=FoxPro/Visual+FoxPro

http://www.portalfox.com/index.php?name=News&file=article&sid=542&mode=nested&order=0&thold=0

Tené fe en google (no es joda).

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
sin imagen de perfil
Val: 20
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Número a Texto

Publicado por Marcelo (L) (186 intervenciones) el 20/10/2009 21:47:04
yo uso esta funcion :
lparameters numalet
n1='un'
n2='dos'
n3='tres'
n4='cuatro'
n5='cinco'
n6='seis'
n7='siete'
n8='ocho'
n9='nueve'
n10='diez'
n11='once'
n12='doce'
n13='trece'
n14='catorce'
n15='quince'
n16='dieciseis'
n17='diecisiete'
n18='dieciocho'
n19='diecinueve'
n20='veinte'
n30='treinta'
n40='cuarenta'
n50='cincuenta'
n60='sesenta'
n70='setenta'
n80='ochenta'
n90='noventa'
n100='ciento'
n200='doscientos'
n300='trescientos'
n400='cuatrocientos'
n500='quinientos'
n600='seiscientos'
n700='setecientos'
n800='ochocientos'
n900='novecientos'
contador=1
inicio=1
cadena0=str(numalet,12,2)
cadena=substr(cadena0,1,9)
if cadena+'.00'=cadena0
fin=''
else
fin=' con '+substr(cadena0,11,2)+' centavos'
endif
enletra=''
if numalet=0
enletra='cero'
RETURN(enletra)
endif
if numalet=1
enletra='un peso'
RETURN(enletra)
endif
moneda=' pesos'
if val(cadena)=0
moneda=' centavos'
fin=''
cadena=space(7)+substr(cadena0,11,2)
endif
do while contador<4
subcadena=substr(cadena,inicio,3)
centena=substr(subcadena,1,1)+'00'
decena=substr(subcadena,2,2)
unidad=substr(subcadena,3,1)
if val(subcadena) > 99
if val(decena) = 0 .and. centena='100'
enletra=enletra+'cien '
else
enletra=enletra+n¢ena.+' '
endif
endif
t=val(decena)
if t > 0
do case
case (int(t/10)=t/10).or.(t>9.and.t<20)
enletra=enletra+n&decena
case t > 9.and.(int(t/10)#t/10)
decena=substr(decena,1,1)+'0'
if decena#'20'
enletra=enletra+n&decena.+' y '+n&unidad
else
enletra=enletra+'venti'+n&unidad
endif
case t < 10
enletra=enletra+n&unidad
endcase
endif
if numalet > 999999.and.contador=1
enletra=trim(enletra)+' millones '
endif
if trim(enletra)='un millones'
enletra='un millón '
endif
if numalet > 999.and.contador=2.and.val(subcadena) > 0
enletra=trim(enletra)+' mil '
endif
inicio=contador*3+1
contador=contador+1
enddo
if trim(enletra)=='un millón'
enletra=trim(enletra)+' de '
endif
enletra=trim(enletra)+moneda+fin
RETURN(enletra)
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:Número a Texto

Publicado por DANIEL (13 intervenciones) el 21/10/2009 22:32:19
OYE MARCELO Y ESE MISMO PROGRAMA COMO PUEDO HACER PARA QUE ME FUNCIONE AL EJECUTAR UN INFORME
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
sin imagen de perfil
Val: 29
Ha aumentado su posición en 3 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:Número a Texto

Publicado por Chucho (271 intervenciones) el 21/10/2009 22:57:45
Supongamos que Marcelo llamó ConvierteNumLetras() a la función que dejó en su post.
Entonces lo que harías es crear un control texto (campo) en tu reporte y como valor darle:
=ConvierteNumLetras( AquiElNumeroaConvertir)

Saludos.
Javier (Jujuy-Argentina)
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:Número a Texto

Publicado por Gabriel (427 intervenciones) el 22/10/2009 18:23:47
Amiga Vicky :

A continuacion te muestro una rutina que vengo utilizando en mis proyectos, la forma de utilizarlo es de la siguiente forma :

Thisform.TEXT2.Value = NTOL(Thisform.txtTot_Pago.Value,"NUEVOS SOLES")

Al final puedes cambiarle el nombre de la moneda...

El siguiente codigo lo guardas dentro de un programa y lo invocas de esta forma.

SET PROCEDURE TO "C:\CONTROL\RUTINAS2.PRG"

FUNCTION Ntol
PARA pnum, pmnd, pupp
PRIV knum, kmnd, klet,kupp
DECL uni(20), dec(10), cie(10), mil(1), mll(1), bll(1)
PRIV letra, centimos, kint, kcnt, kcntn
*--
knum=iif(empt(pnum),0,pnum)
kupp=iif(empt(pupp),0,pupp)
kmnd=iif(empt(pmnd),"",allt(pmnd))
klet="a y "
*--
Do Case
case knum=0
letra=allt("cero"+" "+kmnd)
othe
l_uni1="uno dos tres cuatro cinco seis siete ocho nueve diez "
l_uni2="once doce trece catorce quince dieciseis diecisietedieciocho diecinueveveinte "
l_dec ="diez veint treint cuarent cincuent sesent setent ochent novent "
l_cie ="c dosc tresc cuatroc quin seisc setec ochoc novec "
*--
for i=1 to 10
uni(i) =allt(subs(l_uni1,10*(i-1)+1,10))
uni(i+10)=allt(subs(l_uni2,10*(i-1)+1,10))
dec(i) =allt(subs(l_dec ,10*(i-1)+1,10))
cie(i) =allt(subs(l_cie ,10*(i-1)+1,10))+"ient"+iif(i=1,"o",iif(righ(kmnd,2)="as","as","os"))
endfor
*--
mil(1) ="mil"
mll(1) ="millones"
bll(1) ="billones"
*--
kint =int(knum)
kcnt =int((knum-int(knum))*100)
kcntn='CON '+padl(ALLTRIM(STR(kcnt)),2,'0')+'/100'
*--
letra =allt(pntol(kint,iif(empt(pmnd),0,1)))
centimos=iif(kcnt=0,"","con "+pntol(kcnt,1)+" centimo"+iif(kcnt=1,"","s"))
endcase
IF kupp>0
letra=UPPER(letra)
ELSE
letra=UPPER(SUBSTR(letra,1,1))+SUBSTR(letra,2,LEN(letra))
ENDIF
*--
RETURN letra + " "+kcntn+" "+kmnd
*******************************************************************
FUNCTION pntol
Para fnum,fm
Local llet
*--
fnum=int(fnum)
*--
DO Case
case fnum=0
palabra=""
case fnum=1
* palabra=iif(empt(fm),uni(1),"un")
palabra=iif(empt(fm),l_uni1,"UNO")
case betw(fnum,2,20)
palabra=uni(fnum)
case betw(fnum,21,99)
llet=iif(betw(fnum,21,29),"i",klet)
palabra=dec(fnum/10)
palabra=palabra+iif(fnum-int(fnum/10)*10=0,"a",llet+pntol(fnum-int(fnum/10)* 10,fm))
case fnum=100
palabra=left(cie(1),4)
case betw(fnum,101,999)
palabra=cie(fnum/100)+" "+pntol(fnum-int(fnum/100)*100,fm)
case betw(fnum,1000,1999)
palabra="UN " + LEFT(mil(1),4)+" "+pntol(fnum-1000,fm)
* palabra=mil(1)+" "+pntol(fnum-1000,fm)
case betw(fnum,2000,999999)
palabra=pntol(fnum/1000,1)+" "+mil(1)+" "+pntol(fnum-int(fnum/1000)*1000,fm)
case betw(fnum,1000000,1999999)
palabra="un "+left(mll(1),6)+" "+pntol(fnum-1000000,fm)
case betw(fnum,2000000,999999999999)
palabra=pntol(fnum/1000000,1)+" "+mll(1)+" "+pntol(fnum-int(fnum/1000000)*1000000,fm)
case betw(fnum,1000000000000,1999999999999)
palabra="un "+left(bll(1),6)+" "+pntol(fnum-1000000000000,fm)
case betw(fnum,2000000000000,99999999999999999)
palabra=pntol(fnum/1000000000000,1)+" "+bll(1)+" "+pntol(fnum-int(fnum/1000000000000)*1000000000000)
Endcase
*--
Return UPPER(Alltrim(palabra))

Saludos,

Gabriel
(Lima-Perú)
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