Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Converting numbers to letters
Message
 
 
To
17/07/2000 00:03:02
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
00393097
Message ID:
00393613
Views:
16
Hola Ulises,

>Hi all...
>I'm trying to write some code that converts a currency amount to letters for invoicing (in Spanish) I take an amount from a field and the first thing to do is isolate the cents. I do this as:
>cents=amount-int(amount). Problem is I got a number like 0.45.
>How to get rid of the 0. and convert this to a string to be used in the final expression?
>TIA.
>Ulises.

I took this from the site of Pablo Roca and the autor is Luis Maria Guayán
HTH

*----------------------------------------------------------------
* FUNCTION Num2Let(tnNumero)
*----------------------------------------------------------------
* Devuelve un número en letras con centavos
* USO: ? Num2Let(15.11) -> QUINCE CON ONCE CENTAVOS
* RETORNA: Caracter
*----------------------------------------------------------------
FUNCTION Num2Let(tnNumero)
LOCAL lnEntero, lnFraccion
tnNumero = ROUND(tnNumero, 2)
lnEntero = INT(tnNumero)
lnFraccion = INT((tnNumero - lnEntero) * 100)
RETURN N2L(lnEntero, 0) + 'CON ' + ;
N2L(lnFraccion, 1) + 'CENTAVOS.'
ENDFUNC

*----------------------------------------------------------------
* FUNCTION N2L(tnNro, tnFlag)
*----------------------------------------------------------------
* Devuelve un número entero en letras
* Usada por Let2Num (deben estar ambas)
* USO: ? N2L(32) -> TREINTA Y DOS
* RETORNA: Caracter
*----------------------------------------------------------------
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 # 0)
lcMiles = 'MIL '
CASE lnTerna = 3 AND (lnUnidades + lnDecenas + lnCentenas # 0)
lcMiles = IIF(lnUnidades = 1 AND lnDecenas = 0 AND ;
lnCentenas = 0, 'MILLON ', 'MILLONES ')
CASE lnTerna = 4 AND (lnUnidades + lnDecenas + lnCentenas # 0)
lcMiles = 'MIL MILLONES '
CASE lnTerna = 5 AND (lnUnidades + lnDecenas + lnCentenas # 0)
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
lcCadena = IIF(lnTerna = 1 AND tnFlag = 0, 'UNO ', 'UN ')
CASE lnUnidades = 2
lcCadena = 'DOS '
CASE lnUnidades = 3
lcCadena = 'TRES '
CASE lnUnidades = 4
lcCadena = 'CUATRO '
CASE lnUnidades = 5
lcCadena = 'CINCO '
CASE lnUnidades = 6
lcCadena = 'SEIS '
CASE lnUnidades = 7
lcCadena = 'SIETE '
CASE lnUnidades = 8
lcCadena = 'OCHO '
CASE lnUnidades = 9
lcCadena = 'NUEVE '
ENDCASE

*--- Analizo las decenas
DO CASE
CASE lnDecenas = 1
DO CASE
CASE lnUnidades = 0
lcCadena = 'DIEZ '
CASE lnUnidades = 1
lcCadena = 'ONCE '
CASE lnUnidades = 2
lcCadena = 'DOCE '
CASE lnUnidades = 3
lcCadena = 'TRECE '
CASE lnUnidades = 4
lcCadena = 'CATORCE '
CASE lnUnidades = 5
lcCadena = 'QUINCE '
OTHER
lcCadena = 'DIECI' + lcCadena
ENDCASE
CASE lnDecenas = 2
lcCadena = IIF(lnUnidades = 0, 'VEINTE ', 'VEINTI') + lcCadena
CASE lnDecenas = 3
lcCadena = 'TREINTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 4
lcCadena = 'CUARENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 5
lcCadena = 'CINCUENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 6
lcCadena = 'SESENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 7
lcCadena = 'SETENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 8
lcCadena = 'OCHENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 9
lcCadena = 'NOVENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
ENDCASE

*--- Analizo las centenas
DO CASE
CASE lnCentenas = 1
lcCadena = IIF(lnUnidades = 0 AND lnDecenas = 0, ;
'CIEN ', 'CIENTO ') + lcCadena
CASE lnCentenas = 2
lcCadena = 'DOSCIENTOS ' + lcCadena
CASE lnCentenas = 3
lcCadena = 'TRESCIENTOS ' + lcCadena
CASE lnCentenas = 4
lcCadena = 'CUATROCIENTOS ' + lcCadena
CASE lnCentenas = 5
lcCadena = 'QUINIENTOS ' + lcCadena
CASE lnCentenas = 6
lcCadena = 'SEISCIENTOS ' + lcCadena
CASE lnCentenas = 7
lcCadena = 'SETECIENTOS ' + lcCadena
CASE lnCentenas = 8
lcCadena = 'OCHOCIENTOS ' + lcCadena
CASE lnCentenas = 9
lcCadena = 'NOVECIENTOS ' + lcCadena
ENDCASE

*--- Armo el retorno terna a terna
lcRetorno = lcCadena + lcMiles + lcRetorno
lnTerna = lnTerna + 1
ENDDO
IF lnTerna = 1
lcRetorno = 'CERO '
ENDIF
RETURN lcRetorno
ENDFUNC
Carlos Etcheverry
Monte Grande
Buenos Aires
Argentina

Es mejor un mal dia de pesca que un buen dia de trabajo!
Previous
Reply
Map
View

Click here to load this message in the networking platform