FoxPro/Visual FoxPro - monetario a caracter

 
Vista:

monetario a caracter

Publicado por miriam (67 intervenciones) el 30/07/2007 22:27:39
Me podrian ayudar a convertir una cadena tipo monetario a caracter.

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

RE:monetario a caracter

Publicado por Ernesto Hernandez (4623 intervenciones) el 30/07/2007 22:33:18
? WORD(525.87)

FUNCTION WORD()
LPARAMETERS _NUM
IF TYPE('_NUM')#'N'
RETURN 'Solo traduce Cadenas Numericas'
ENDIF
STORE ' ' TO _LMILLON,_LMILES,_LET
_L1='UN DOS TRES CUATRO CINCO SEIS SIETE OCHO NUEVE DIEZ ONCE DOCE TRECE CATORCE QUINCE'
_G1=' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15'
_X1=' 1 4 8 13 20 26 31 37 42 48 53 58 63 69 77'
_Y1=' 2 3 4 6 5 4 5 4 5 4 4 4 5 7 6'
_L2='VEINTE TREINTA CUARENTA CINCUENTA SESENTA SETENTA OCHENTA NOVENTA'
_G2='20 30 40 50 60 70 80 90'
_X2=' 1 8 16 25 35 43 51 59'
_Y2=' 6 7 8 9 7 7 7 7'
_L3='CIENTO DOSC TRESC CUATROC QUIN SEISC SETEC OCHOC NOVEC'
_G3=' 1 2 3 4 5 6 7 8 9'
_X3=' 1 8 13 19 27 32 38 44 50'
_Y3=' 6 4 5 7 4 5 5 5 5'
IF _NUM=0
RETURN 'CERO'
ENDIF
IF _NUM>999999999
RETURN 'Solo traduce Numeros inferiores a Mil Millones......'
ENDIF
_NOM=_NUM
_NAM=INT(_NUM)
_MILLON=VAL(SUBSTR(STR(_NAM,9),1,3))
_MILES=VAL(SUBSTR(STR(_NAM,9),4,3))
_CIENTOS=VAL(SUBSTR(STR(_NAM,9),7,3))
IF _CIENTOS>0
_X=1
ENDIF
IF _MILES>0
_X=2
ENDIF
IF _MILLON>0
_X=3
ENDIF
DO WHILE _X>0
IF _X=3
_NUM=_MILLON
ELSE
IF _X=2
_NUM=_MILES
ELSE
IF _X=1
_NUM=_CIENTOS
ENDIF
ENDIF
ENDIF
_NUM1=_NUM
_CAD=STR(_NUM,3)
_C1=SUBSTR(_CAD,2,2)
IF _NUM>0
IF _NUM>100
_NUM2=VAL(_C1)
_NUM=_NUM2
_C3=SUBSTR(_CAD,1,1)
_N3=AT(_C3,_G3)
_INI3=VAL(SUBSTR(_X3,_N3,2))
_LON3=VAL(SUBSTR(_Y3,_N3,2))
_LET3=SUBSTR(_L3,_INI3,_LON3)+IIF(_C3='1',' ','IENTOS ')
ENDIF
IF _NUM<10
_CAD=STR(_NUM,1)
_C1=SUBSTR(_CAD,1,1)
ELSE
IF _NUM<100
_CAD=STR(_NUM,2)
ENDIF
ENDIF
IF _NUM<16
_N1=AT(_C1,_G1)
_INI=VAL(SUBSTR(_X1,_N1,2))
_LON=VAL(SUBSTR(_Y1,_N1,2))
_LET=SUBSTR(_L1,_INI,_LON)
ELSE
IF _NUM<20
_C1=SUBSTR(_CAD,2,1)
_N1=AT(_C1,_G1)
_INI=VAL(SUBSTR(_X1,_N1,2))
_LON=VAL(SUBSTR(_Y1,_N1,2))
_LET='DIECI'+SUBSTR(_L1,_INI,_LON)
ELSE
_C2=VAL(SUBSTR(_CAD,2,1))
_NUM=_NUM-_C2
_C1=STR(_NUM,2)
_N1=AT(_C1,_G2)
_INI=VAL(SUBSTR(_X2,_N1,2))
_LON=VAL(SUBSTR(_Y2,_N1,2))
_LET=SUBSTR(_L2,_INI,_LON)
IF SUBSTR(_CAD,2,1)#'0'
_C2=SUBSTR(_CAD,2,1)
_N2=AT(_C2,_G1)
_INI2=VAL(SUBSTR(_X1,_N2,2))
_LON2=VAL(SUBSTR(_Y1,_N2,2))
_LET=_LET+' Y '+SUBSTR(_L1,_INI2,_LON2)
ENDIF
ENDIF
ENDIF
IF _NUM1>99
IF _NUM1=100
_LET='CIEN '
ELSE
_LET=_LET3+_LET
ENDIF
ENDIF
IF _X=3
_LMILLON=_LET+' MILLONES'
IF SUBSTR(_LET,1,2)='UN'
_LMILLON=_LET+' MILLON'
ENDIF
ENDIF
IF _X=2
_LMILES=_LET+' MIL'
IF SUBSTR(_LET,1,2)='UN'
_LMILES='MIL'
ENDIF
ENDIF
ENDIF
_X=_X-1
ENDDO
IF _MILLON>0
IF _MILES=0
IF _cientos=0
_BB=_LMILLON
ELSE
_BB=_LMILLON+' '+_LET
ENDIF
ELSE
IF _cientos=0
_BB=_lmillon+' '+_lmiles
ELSE
_BB=_LMILLON+' '+_LMILES+' '+_LET
ENDIF
ENDIF
ELSE
IF _MILES>0
IF _cientos=0
_BB=_lmiles
ELSE
_BB=_LMILES+' '+_LET
ENDIF
ELSE
_BB=_LET
ENDIF
ENDIF
_BB=_BB+' CON '+SUBSTR(STR(_NOM,13,2),12,2)+'/100'
RETURN _BB
ENDFUNC

Suerte
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:monetario a caracter

Publicado por miriam (67 intervenciones) el 30/07/2007 22:42:44
y para cambiar un numero a caracter??

GRacias
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

RE:monetario a caracter

Publicado por Ernesto Hernandez (4623 intervenciones) el 30/07/2007 22:50:15
? NtoL(351.21)

func NtoL
para pnum, pmnd, plet
priv knum, kmnd, klet
decl uni(20), dec(10), cie(10), mil(1), mll(1), bll(1)
priv letra, centavos, kint, kcnt, kmn1, kmn2, ksex
knum=iif(empt(pnum),0,pnum)
kmnd=iif(empt(pmnd),"",allt(pmnd))
klet=iif(empt(plet),"a y ","i")
kmn1=iif(at("/",allt(kmnd))=0,kmnd,left(kmnd,at("/",allt(kmnd))-1))
kmn2=right(kmnd,len(kmnd)-at("/",allt(kmnd)))
ksex=iif(right(kmn1,2)="as" or right(kmn2,1)="a",.f.,.t.)
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 trec cuatroc quin seic 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(ksex,"os","as"))
endfor
mil(1) ="mil"
mll(1) ="millones"
bll(1) ="billones"
kint =int(knum)
kcnt =int((knum-int(knum))*100)
letra =allt(pntol(kint,iif(empt(pmnd),0,1))+" "+iif(kint=1,kmn2,kmn1))
centavos=iif(kcnt=0,"","con "+pntol(kcnt,1)+" centavo"+iif(kcnt=1,"","s"))
endcase
retu letra+" "+centavos
*******************************************************************
func 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"+iif(ksex,"","a"))
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=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
retu allt(palabra)

Suerte
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:monetario a caracter

Publicado por Plinio (7841 intervenciones) el 31/07/2007 04:09:39
STR() te funciona?
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