Por Carlos Maldonado (México)
© Copyrights 1998 by FoxPress, All rights reserved
FoxPress, Abril 1998
Para probar esta utilidad basta con que escribáis
SET PROCEDURE TO [PATH\]convert.prg ? Número(numero)Espero que os sirva
*** Programa para evaluar un número y convertirlo a texto function numero(num) Local S_Billo local S_MilMill local S_Mill local S_Mil local S_Cien local S_Cents Local No_Hay_Mil Local Tex_Num Local Str_Num S_Billo = "" S_MilMill = "" S_Mill = "" S_Mil = "" S_Cien = "" S_Cents = "" No_Hay_Mil = .t. Tex_Num = "" Str_Num = "" str_Num =alltrim(transform(abs(num),"999999999999999.99")) do while int(len(str_num)/3)!=len(str_num)/3 str_num = "0" + str_num enddo if Val(str_num) < 1 tex_num = " Cero" endif if len(Str_num)> 18 .or. Str_Num = "***" tex_num = "*****" return tex_num endif * Billones // if len(str_num) = 18 s_billo = substr(str_num,1,3) tex_num = tex_num + det_qty(@s_billo) tex_num = tex_num + IIF( substr(str_num,1,3)="001" .and. len(tex_num) <= 4, ; " Billon", " Billones") str_num = substr(str_num,4,15) endif * Miles de Millones // if len(str_num) = 15 s_MilMill = substr(str_num,1,3) se_pone = IIF(val(s_milmill)>0,.t.,.f.) tex_num = tex_num + det_qty(@s_milmill) if se_pone tex_num = tex_num + " Mil" endif str_num = substr(str_num,4,15) endif * Millones // if len(str_num) = 12 s_Mill = substr(str_num,1,3) se_pone = IIF(val(s_mill)>0,.t.,.f.) tex_num = tex_num + det_qty(@s_Mill) tex_num = tex_num + IIF( substr(str_num,1,3)="001" and not "Mil"$tex_num," Millon",IIF(val(S_MilMill)>0 .or. se_pone," Millones","")) str_num = substr(str_num,4,9) endif * Miles // if len(str_num) = 9 s_Mil = substr(str_num,1,3) no_hay_mil = IIF(Val(s_mil)>0,.f.,.t.) tex_num = tex_num + det_qty(@s_Mil) tex_num = tex_num + IIF(substr(str_num,1,3)>"000", " Mil", "") str_num = substr(str_num,4,6) endif * Cienes // if len(str_num) = 6 s_cien = substr(str_num,1,3) peso=IIF(Val(S_cien)= 1 AND no_hay_mil,.t.,.f.) tex_num = tex_num + det_qty(@s_cien) str_num = substr(str_num,4,3) endif if " Un "==left(Tex_num,4) Tex_Num=substr(Tex_Num,4) endif return(ltrim(tex_num)) ** ** Función Det_qty(n) ** Determina cantidad. Function Det_qty(n) local Ct local Xc local Dc local tx Declare Ct[9] Declare Xc[29] Declare Dc[9] Ct[1] = " Ciento" Ct[2] = " Doscientos" Ct[3] = " Trescientos" Ct[4] = " Cuatrocientos" Ct[5] = " Quinientos" Ct[6] = " Seiscientos" Ct[7] = " Setecientos" Ct[8] = " Ochocientos" Ct[9] = " Novecientos" Xc[1] = " Un" Xc[2] = " Dos" Xc[3] = " Tres" Xc[4] = " Cuatro" Xc[5] = " Cinco" Xc[6] = " Seis" Xc[7] = " Siete" Xc[8] = " Ocho" Xc[9] = " Nueve" Xc[10]= " Diez" Xc[11]= " Once" Xc[12]= " Doce" Xc[13]= " Trece" Xc[14]= " Catorce" Xc[15]= " Quince" Xc[16]= " Dieciseis" Xc[17]= " Diecisiete" Xc[18]= " Dieciocho" Xc[19]= " Diecinueve" Xc[20]= " Veinte" Xc[21]= " Veintiun" Xc[22]= " Veintidos" Xc[23]= " Veintitres" Xc[24]= " Veinticuatro" Xc[25]= " Veinticinco" Xc[26]= " Veintiseis" Xc[27]= " Veintisiete" Xc[28]= " Veintiocho" Xc[29]= " Veintinueve" Dc[1] = "" Dc[2] = "" Dc[3] = " Treinta" Dc[4] = " Cuarenta" Dc[5] = " Cincuenta" Dc[6] = " Sesenta" Dc[7] = " Setenta" Dc[8] = " Ochenta" Dc[9] = " Noventa" tx= "" if n = "100" return " Cien" endif tx = tx + IIF(val(substr(n,1,1))>0, Ct[val(substr(n,1,1))], "") tx = tx + IIF(val(substr(n,2,2))>0 and val(substr(n,2,2))<30,Xc[val(substr(n,2,2))], "") tx = tx + IIF(val(substr(n,2,2))>29 , Dc[val(substr(n,2,1))]+ IIF(val(substr(n,3,1))>0," y"+Xc[val(substr(n,3,1))],""), "") return(tx)