Rutina para convertir cantidad en letra

Me pueden ayudar con la rutina para convertir una cantidad en pesos a letra, es decir:
$ 5,800.20 convertir a (cinco mil ochocientos pesos 20/100 m.n.)

1 Respuesta

Respuesta
1
Edgard si queres pasame un mail y te la envió en forma directa.
Esta es la función pero no queda del todo legible.
Ej de uso
?DES_NUM(5800.20)
******************************
FUNCTION DES_NUM(CANTIDAD)
*DECLARACION DE VARIABLES
LOCAL CENTAVOS,PESOS,MILES,cNUMERO,MILLONES,ESMILLON,TEX_MILLON
LOCAL APUNTADOR
cTEXTO=""
Abrime('NUMEROS')
sele numeros
*MESSAGEBOX("CANTIDAD= "+STR(CANTIDAD,15,2),64,"CTX1000")
*SE EXTRAE LA CANTIDAD EN CENTAVOS Y SE LE AGREGA
*EL TEXTO /100 M.N.
CENTAVOS = SUBSTR(STR(CANTIDAD,15,2),14,2)
CENTAVOS = CENTAVOS + " /100.-"
PESOS = STR(CANTIDAD,15,2)
PESOS = SUBSTR(PESOS,11,2)
*MESSAGEBOX("EL NUMERO 1 ES "+PESOS,64,"CTX")
*SE CALCULA EL TEXTO PARA LOS PESOS
cNUMERO=VAL(ALLTRIM(PESOS))
*MESSAGEBOX("EL NUMERO ES "+STR(cNUMERO),64,"CTX")
DO CASE
CASE cNUMERO>0 AND cNUMERO<=9
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO =ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
* MESSAGEBOX("ENTRO CASO 1",64,"CTX")
GO TOP
CASE cNUMERO>=10 AND cNUMERO<=19
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
* MESSAGEBOX("ENTRO CASO 2",64,"CTX")
GO TOP
CASE cNUMERO>=20 AND cNUMERO<=29
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
* MESSAGEBOX("ENTRO CASO 3",64,"CTX")
GO TOP
OTHERWISE
*UNIDADES
* MESSAGEBOX("ENTRO ULTIMO CASO ",64,"CTX")
PESOS = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),12,1))
cNUMERO=VAL(PESOS)
LOCATE FOR NUMEROS.NUMERO=cNUMERO
IF cNUMERO=0 THEN
*NADA
ELSE
cTEXTO = "Y "+ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
ENDIF
*DECENAS
GO TOP
PESOS = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),11,1))
PESOS = ALLTRIM(PESOS+"0")
cNUMERO=VAL(PESOS)
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
GO TOP
ENDCASE
PESOS = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),10,1))
cNUMERO=VAL(ALLTRIM(PESOS))
IF cNUMERO=1 THEN
cTEXTO= "CIENTO "+cTEXTO
ELSE
PESOS=PESOS+"00"
cNUMERO=VAL(ALLTRIM(PESOS))
* MESSAGEBOX("EL NUMERO PRUEBA ES :"+STR(cNUMERO),64,"CTX")
LOCATE FOR NUMEROS.NUMERO=cNUMERO
* MESSAGEBOX("TEXTO ES :"+NUMEROS.TEXTO,64,"CTX")
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
GO TOP
ENDIF
cNUMERO=0
*SE CALCULA EL TEXTO PARA LOS MILES
MILES = STR(CANTIDAD,15,2)
MILES = SUBSTR(MILES,8,2)
cNUMERO=VAL(ALLTRIM(MILES))
*MESSAGEBOX("EL NUMERO ES "+STR(cNUMERO),64,"CTX")
DO CASE
CASE cNUMERO>0 AND cNUMERO<=9
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO =ALLTRIM(NUMEROS.TEXTO)+" MIL "+cTEXTO
* MESSAGEBOX("ENTRO CASO 1",64,"CTX")
GO TOP
CASE cNUMERO>=10 AND cNUMERO<=19
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" MIL "+cTEXTO
* MESSAGEBOX("ENTRO CASO 2",64,"CTX")
GO TOP
CASE cNUMERO>=20 AND cNUMERO<=29
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" MIL "+cTEXTO
* MESSAGEBOX("ENTRO CASO 3",64,"CTX")
GO TOP
OTHERWISE
*UNIDADES
* MESSAGEBOX("ENTRO ULTIMO CASO ",64,"CTX")
MILES = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),9,1))
cNUMERO=VAL(MILES)
LOCATE FOR NUMEROS.NUMERO=cNUMERO
IF cNUMERO=0 THEN
*NADA
ELSE
cTEXTO = "Y "+ALLTRIM(NUMEROS.TEXTO)+" MIL "+cTEXTO
ENDIF
*DECENAS
GO TOP
MILES = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),8,1))
MILES = ALLTRIM(MILES+"0")
cNUMERO=VAL(MILES)
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
GO TOP
ENDCASE
MILES = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),7,1))
cNUMERO=VAL(ALLTRIM(MILES))
IF cNUMERO=1 THEN
cTEXTO= "CIENTO "+cTEXTO
ELSE
MILES=MILES+"00"
cNUMERO=VAL(ALLTRIM(MILES))
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
GO TOP
ENDIF
cNUMERO=0
*SE CALCULA EL TEXTO PARA LOS MILLONES
MILLONES = STR(CANTIDAD,15,2)
ESMILLON= SUBSTR(MILLONES,5,3)
IF VAL(ALLTRIM(ESMILLON))=1 THEN
TEX_MILLON=" MILLON "
ELSE
TEX_MILLON=" MILLONES "
ENDIF
MILLONES = SUBSTR(MILLONES,5,2)
cNUMERO=VAL(ALLTRIM(MILLONES))
*MESSAGEBOX("EL NUMERO ES "+STR(cNUMERO),64,"CTX")
DO CASE
CASE cNUMERO>0 AND cNUMERO<=9
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO =ALLTRIM(NUMEROS.TEXTO)+TEX_MILLON+cTEXTO
* MESSAGEBOX("ENTRO CASO 1",64,"CTX")
GO TOP
CASE cNUMERO>=10 AND cNUMERO<=19
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+TEX_MILLON+cTEXTO
* MESSAGEBOX("ENTRO CASO 2",64,"CTX")
GO TOP
CASE cNUMERO>=20 AND cNUMERO<=29
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+TEX_MILLON+cTEXTO
* MESSAGEBOX("ENTRO CASO 3",64,"CTX")
GO TOP
OTHERWISE
*UNIDADES
* MESSAGEBOX("ENTRO ULTIMO CASO ",64,"CTX")
MILLONES = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),6,1))
cNUMERO=VAL(MILLONES)
LOCATE FOR NUMEROS.NUMERO=cNUMERO
IF cNUMERO=0 THEN
*NADA
ELSE
cTEXTO = "Y "+ALLTRIM(NUMEROS.TEXTO)+TEX_MILLON+cTEXTO
ENDIF
*DECENAS
GO TOP
MILLONES = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),5,1))
MILLONES = ALLTRIM(MILLONES+"0")
cNUMERO=VAL(MILLONES)
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
GO TOP
ENDCASE
MILLONES = ALLTRIM(SUBSTR(STR(CANTIDAD,15,2),4,1))
cNUMERO=VAL(ALLTRIM(MILLONES))
IF cNUMERO=1 THEN
cTEXTO= "CIENTO "+cTEXTO
ELSE
MILLONES=MILLONES+"00"
cNUMERO=VAL(ALLTRIM(MILLONES))
LOCATE FOR NUMEROS.NUMERO=cNUMERO
cTEXTO = ALLTRIM(NUMEROS.TEXTO)+" "+cTEXTO
GO TOP
ENDIF
IF FLOOR(CANTIDAD)=1 THEN
cTEXTO = cTEXTO + " PESO con"
ELSE
cTEXTO = cTEXTO + " PESOS con"
ENDIF
cTEXTO = cTEXTO +" "+ CENTAVOS
*MESSAGEBOX("cTEXTO QUEDA = "+cTEXTO,"CTX1000")
Se le NÚMEROS
USE
RETURN cTEXTO

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas