Professional Documents
Culture Documents
PUBLIC XCAN
XCAN=115.11
? Num2Let(XCAN)
* RESULTADO EN PANTALLA-> "CIENTO QUINCE PESOS 11/100 M.N."
*-------------------------------------------------------------------------* FUNCTION Num2Let(tnNumero)
*-------------------------------------------------------------------------* Devuelve un nmero en letras con centavos
* USO: ? Num2Let(15.11) -> QUINCE CON ONCE CENTAVOS
* RETORNA: Caracter
* AUTOR: LMG
*-------------------------------------------------------------------------FUNCTION Num2Let(tnNumero)
LOCAL lnEntero, lnFraccion
*-- Elegir si se REDONDEA o TRUNCA
* tnNumero = ROUND(tnNumero, 2) && Redondeo a 2 decimales
tnNumero = INT(tnNumero*100)/100 && Trunco a dos decimales
lnEntero = INT(tnNumero)
lnFraccion = INT((tnNumero - lnEntero) * 100)
RETURN N2L(lnEntero, 0) + "PESOS " + TRANSFORM(lnFraccion, "@L 99") + '/100 M.N.'
N2L(lnFraccion, 1) + 'CENTAVOS.'
ENDFUNC
*-------------------------------------------------------------------------* FUNCTION N2L(tnNro, tnFlag)
*-------------------------------------------------------------------------* Devuelve un nmero entero en letras
* Usada por Let2Num (deben estar ambas)
* USO: ? N2L(32) -> TREINTA Y DOS
* RETORNA: Caracter
* AUTOR: LMG
*-------------------------------------------------------------------------FUNCTION N2L(tnNro, tnFlag)
IF EMPTY(tnFlag)
tnFlag = 0
ENDIF
LOCAL lnEntero, lcRetorno, lnTerna, lcMiles, ;
lcCadena, lnUnidades, lnDecenas, lnCentenas
lnEntero = INT(tnNro)
lcRetorno = ''
lnTerna = 1
DO WHILE lnEntero > 0
lcCadena = ''
lnUnidades = MOD(lnEntero, 10)
lnEntero = INT(lnEntero / 10)
lnDecenas = MOD(lnEntero, 10)
lnEntero = INT(lnEntero / 10)
lnCentenas = MOD(lnEntero, 10)
lnEntero = INT(lnEntero / 10)
*--- Analizo la terna
DO CASE
CASE lnTerna = 1
lcMiles = ''
CASE lnTerna = 2 AND (lnUnidades + lnDecenas + lnCentenas
lcMiles = 'MIL '
CASE lnTerna = 3 AND (lnUnidades + lnDecenas + lnCentenas
lcMiles = IIF(lnUnidades = 1 AND lnDecenas = 0 AND ;
lnCentenas = 0, 'MILLON ', 'MILLONES ')
CASE lnTerna = 4 AND (lnUnidades + lnDecenas + lnCentenas
lcMiles = 'MIL MILLONES '
CASE lnTerna = 5 AND (lnUnidades + lnDecenas + lnCentenas
lcMiles = IIF(lnUnidades = 1 AND lnDecenas = 0 AND ;
lnCentenas = 0, 'BILLON ', 'BILLONES ')
CASE lnTerna > 5
lcRetorno = ' ERROR: NUMERO DEMASIADO GRANDE '
EXIT
ENDCASE
*--- Analizo las unidades
DO CASE
CASE lnUnidades = 1
# 0)
# 0)
# 0)
# 0)
ENDCASE
*--- Armo el retorno terna a terna
lcRetorno = lcCadena + lcMiles + lcRetorno
lnTerna = lnTerna + 1
ENDDO
IF lnTerna = 1
lcRetorno = 'CERO '
ENDIF
RETURN lcRetorno
ENDFUNC