Ejemplo:
? Num2Word(123456.78)
"ONE HUNDRED TWENTY THREE THOUSAND FOUR HUNDRED FIFTY SIX AND 78/100"
*------------------------------------------- * FUNCTION Num2Word(tcNro) *------------------------------------------- * Pasa un Importe a Letras (en Inglés) * USO: ? Num2Word(123456.78) * PARAMETRO: Importe a convertir (Numérico) * RETORNO: Caracter * AUTOR: Luis María Guayán *------------------------------------------- FUNCTION Num2Word(tcNro) LOCAL lnEnt, lcRet, lcCad, lnTerna,; lnUni, lnDec, lnCent, lnFrac lnEnt = INT(tcNro) lnFrac = (tcNro - lnEnt) * 100 lcRet = '' lnTerna = 1 DO WHILE lnEnt > 0 *-- Recorro terna por terna lcCad = '' lnUni = lnEnt % 10 lnEnt = INT(lnEnt/10) lnDec = lnEnt % 10 lnEnt = INT(lnEnt/10) lnCent = lnEnt % 10 lnEnt = INT(lnEnt/10) *-- Analizo las unidades DO CASE && UNIDADES CASE lnUni = 1 lcCad = 'ONE ' + lcCad CASE lnUni = 2 lcCad = 'TWO ' + lcCad CASE lnUni = 3 lcCad = 'THREE ' + lcCad CASE lnUni = 4 lcCad = 'FOUR ' + lcCad CASE lnUni = 5 lcCad = 'FIVE ' + lcCad CASE lnUni = 6 lcCad = 'SIX ' + lcCad CASE lnUni = 7 lcCad = 'SEVEN ' + lcCad CASE lnUni = 8 lcCad = 'EIGHT ' + lcCad CASE lnUni = 9 lcCad = 'NINE ' + lcCad ENDCASE && UNIDADES *-- Analizo las decenas DO CASE && DECENAS CASE lnDec = 1 DO CASE CASE lnUni = 0 lcCad = 'TEN ' CASE lnUni = 1 lcCad = 'ELEVEN ' CASE lnUni = 2 lcCad = 'TWELVE ' CASE lnUni = 3 lcCad = 'THIRTEEN ' CASE lnUni = 4 lcCad = 'FOURTEEN ' CASE lnUni = 5 lcCad = 'FIFTEEN ' CASE lnUni = 6 lcCad = 'SIXTEEN ' CASE lnUni = 7 lcCad = 'SEVENTEEN ' CASE lnUni = 8 lcCad = 'EIGHTEEN ' CASE lnUni = 9 lcCad = 'NINETEEN ' ENDC CASE lnDec = 2 lcCad = 'TWENTY ' + lcCad CASE lnDec = 3 lcCad = 'THIRTY ' + lcCad CASE lnDec = 4 lcCad = 'FORTY ' + lcCad CASE lnDec = 5 lcCad = 'FIFTY ' + lcCad CASE lnDec = 6 lcCad = 'SIXTY ' + lcCad CASE lnDec = 7 lcCad = 'SEVENTY ' + lcCad CASE lnDec = 8 lcCad = 'EIGHTY ' + lcCad CASE lnDec = 9 lcCad = 'NINETY ' + lcCad ENDCASE && DECENAS *-- Analizo las centenas DO CASE && CENTENAS CASE lnCent = 1 lcCad = 'ONE HUNDRED ' + lcCad CASE lnCent = 2 lcCad = 'TWO HUNDRED ' + lcCad CASE lnCent = 3 lcCad = 'THREE HUNDRED ' + lcCad CASE lnCent = 4 lcCad = 'FOUR HUNDRED ' + lcCad CASE lnCent = 5 lcCad = 'FIVE HUNDRED ' + lcCad CASE lnCent = 6 lcCad = 'SIX HUNDRED ' + lcCad CASE lnCent = 7 lcCad = 'SEVEN HUNDRED ' + lcCad CASE lnCent = 8 lcCad = 'EIGHT HUNDRED ' + lcCad CASE lnCent = 9 lcCad = 'NINE HUNDRED ' + lcCad ENDCASE && CENTENAS *-- Analizo la terna DO CASE && TERNA CASE lnTerna = 1 lcCad = lcCad CASE lnTerna = 2 AND (lnUni + lnDec + lnCent # 0) lcCad = lcCad + 'THOUSAND ' CASE lnTerna = 3 AND (lnUni + lnDec + lnCent # 0) lcCad = lcCad + 'MILLON ' CASE lnTerna = 4 AND (lnUni + lnDec + lnCent # 0) lcCad = lcCad + 'BILLON ' ENDCASE && TERNA *-- Armo el retorno terna a terna lcRet = lcCad + lcRet lnTerna = lnTerna + 1 ENDDO && WHILE IF lnTerna = 1 lcRet = 'ZERO ' ENDIF RETURN lcRet + 'AND ' + ; TRANSFORM(lnFrac,"@L 99") + '/100' ENDFUNC *-------------------------------------------
Luis María Guayán
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.