Frafive wrote:Gracias a los dos, la rutina no me devuelve los decimales, me muestra 50/ 100
Me hace falta una rutina que por ejemplo si tengo un importe de 1250.50 me devuelva MIL DOSCIENTOS CINCUENTA EUROS Y CINCUENTA CENTIMOS.
Frafive, yo uso lo siguiente
numer=space(133)
numer1=space(64)
numer2=space(64)
nro2=int(mando)
nro3=(mando-nro2)*100
nro9=val(right(alltrim(str(nro3,8)),2))
numer1=let_num(nro2)
numer2=let_num(nro9)
mandope=alltrim(numer1)+' CON '+alltrim(numer2)+' CENTAVOS'
//--------------------------------------------------------------------------//
//********************************
//*** PASO DE NUMEROS A LETRAS ***
//********************************
FUNCTION let_num(nro1)
local largo
local letra
local nro2
declare unidad[9],decena[9],centena[9],deci[9],vige[9]
unidad[1]='UNO'
unidad[2]='DOS'
unidad[3]='TRES'
unidad[4]='CUATRO'
unidad[5]='CINCO'
unidad[6]='SEIS'
unidad[7]='SIETE'
unidad[8]='OCHO'
unidad[9]='NUEVE'
decena[1] = "DIEZ"
decena[2] = "VEINTE"
decena[3] = "TREINTA"
decena[4] = "CUARENTA"
decena[5] = "CINCUENTA"
decena[6] = "SESENTA"
decena[7] = "SETENTA"
decena[8] = "OCHENTA"
decena[9] = "NOVENTA"
centena[1] = "CIEN"
centena[2] = "DOSCIENTOS"
centena[3] = "TRESCIENTOS"
centena[4] = "CUATROCIENTOS"
centena[5] = "QUINIENTOS"
centena[6] = "SEISCIENTOS"
centena[7] = "SETECIENTOS"
centena[8] = "OCHOCIENTOS"
centena[9] = "NOVECIENTOS"
deci[1] = "ONCE"
deci[2] = "DOCE"
deci[3] = "TRECE"
deci[4] = "CATORCE"
deci[5] = "QUNICE"
deci[6] = "DIECISEIS"
deci[7] = "DIECISIETE"
deci[8] = "
DIECIOCHO"
deci[9] = "DIECINUEVE"
vige[1] = "VEINTIUN"
vige[2] = "VEINTIDOS"
vige[3] = "VEINTITRES"
vige[4] = "VEINTICUATRO"
vige[5] = "VEINTICINCO"
vige[6] = "VEINTISESIS"
vige[7] = "VEINTISIETE"
vige[8] = "VEINTIOCHO"
vige[9] = "VEINTINUEVE"
largo=len(alltrim(str(nro1,8)))
letra=space(0)
do while .t.
do case
case nro1=0
letra=letra+'CERO'
exit
case largo=1 .and. nro1 > 0
letra=letra+unidad[nro1]
exit
case largo=2
if nro1 > 9
do case
case nro1 > 10 .and. nro1 < 20
letra=letra+deci[nro1-10]
case nro1 > 20 .and. nro1 < 30
letra=letra+vige[nro1-20]
case nro1 >= 30 .or. nro1=10 .or. nro1=20
if right(str(nro1,2),1)='0'
letra=letra+decena[nro1/10]
else
letra=letra+decena[nro1/10]+' y '+unidad[val(right(str(nro1,2),1))]
endif
endcase
exit
endif
largo-=1
nro1=val(right(str(nro1,2),1))
case largo=3
if right(str(nro1,3),2)='00'
letra=letra+centena[nro1/100]
exit
else
if nro1 > 99 .and. nro1 < 200
letra=letra+'CIENTO '
else
if nro1 >= 200
letra=letra+centena[nro1/100]+' '
endif
endif
largo-=1
nro1=val(right(str(nro1,3),2))
endif
case largo=4
if right(str(nro1,4),3)='000'
if nro1=1000
letra=letra+'UN MIL'
else
letra=letra+unidad[nro1/1000]+' MIL'
endif
exit
else
if nro1/1000 >= 1 .and. nro1/1000 < 2
letra=letra+'UN MIL '
else
letra=letra+unidad[nro1/1000]+' MIL '
endif
largo-=1
nro1=val(right(str(nro1,4),3))
endif
case largo=5
if right(str(nro1,5),4)='0000'
letra=letra+decena[nro1/10000]+' MIL'
exit
else
if nro1/10000 > 1
nro2=int(nro1/1000)
do case
case nro2 > 10 .and. nro2 < 20
letra=letra+deci[nro2-10]
case nro2 > 20 .and. nro2 < 30
letra=letra+vige[nro2-20]
case nro2 >= 30 .or. nro2=10 .or. nro2=20
if right(str(nro2,2),1)='0'
letra=letra+decena[nro2/10]
else
letra=letra+decena[nro2/10]+' y '+unidad[val(right(str(nro2,2),1))]
endif
endcase
letra=letra+' MIL '
endif
endif
largo-=2
nro1=val(right(str(nro1,5),3))
case largo=6
if right(str(nro1,6),5)='00000'
letra=letra+centena[nro1/100000]+' MIL'
exit
else
if nro1/100000 >= 1 .and. nro1/100000 < 2
letra=letra+' CIENTO '
else
letra=letra+centena[nro1/100000]+' '
if substr(str(nro1,6),2,2)='00'
letra=letra+' MIL '
endif
endif
endif
largo-=1
nro1=val(right(str(nro1,6),5))
endcase
enddo
Return(letra)
Espero te sirva.
Saludos