Convertir cifras a letras

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

Post Reply
rmtarget
Posts: 67
Joined: Sat Jul 04, 2009 7:28 pm

Convertir cifras a letras

Post by rmtarget »

Hola Amigos: alguien tiene algún algoritmo que convierta una cifra en texto ? ejemplo: 146.00 (ciento cuarenta y seis cero centavos) De antemano muchas gracias por la ayuda y saludos cordiales.
Atte.
rene mtz > méxico city
De antemano muchas gracias y saludos !!
Atte.
Rene Mtz. (méxico city)
User avatar
danielmaximiliano
Posts: 2763
Joined: Fri Apr 09, 2010 4:53 pm
DBs Used: DBF
Location: Argentina
Contact:

Re: Convertir cifras a letras

Post by danielmaximiliano »

Hola Rene :
te dejo un mail de un colega puede servirte

Code: Select all

Rodolfo:
Esta rutinita, puede no ser la mejor, pero tiene a su favor que me ha impreso el importe
en letras de cheques por varios años, asi que te la paso y que te sea tan útil como a mi.
Saludos.

Function NumLet( Imp_Pagado )
    cl_Amt = m.Imp_Pagado
    cl_Cents = SUBS(STR(cl_Amt-INT(cl_Amt),4,2),3,2)
    cl_cAmt = STR(INT(cl_Amt),9,0)
    cl_wAmt = ""

* Millones *
    IF cl_Amt >= 1000000
           cl_tAmt = SUBS(cl_cAmt,1,3)
           IF VAL(SUBS(cl_cAmt,1,3)) > 1
              cl_wAmt = cl_wAmt+( wAmount1(cl_tAmt,.T.) + "millones " )
           ELSE
              cl_wAmt = cl_wAmt+"un mill¢n "
           ENDIF
    ENDIF

* Miles *
    IF cl_Amt >= 1000 .AND. VAL(SUBS(cl_cAmt,4,3)) <> 0
           cl_tAmt = SUBS(cl_cAmt,4,3)
           cl_wAmt = cl_wAmt+( wAmount1(cl_tAmt,.T.)+"mil " )
    ENDIF

* Centena, decenas y unidades *
    IF cl_Amt > 0
           cl_tAmt = SUBS(cl_cAmt,7,3)
           cl_wAmt = cl_wAmt+( wAmount1(cl_tAmt) )
    ENDIF

* Centavos *
    IF VAL(cl_Cents) <> 0
           cl_wAmt = cl_wAmt+"con "+cl_Cents+"/100"
    ENDIF

* Punto final *
    cl_wAmt = RTRIM(cl_wAmt)+"."
   
Return cl_wAmt


FUNCTION wAmount1( cl_tAmt1,lMil )
    PRIVATE cl_wAmt1, cl_yAmt

    cl_wAmt1 = ""
    IF TYPE('lMil') <> 'L'
        lMil = .F.
    ENDIF

    IF VAL(cl_tAmt1) > 99
        cl_yAmt = VAL(SUBS(cl_tAmt1,1,1))
        DO CASE
            CASE cl_yAmt = 1 .AND. VAL(cl_tAmt1) > 100
                cl_wAmt1 = cl_wAmt1+"ciento "
            CASE cl_yAmt = 1 .AND. VAL(cl_tAmt1) = 100
                cl_wAmt1 = cl_wAmt1+"cien "
            CASE cl_yAmt = 2
                cl_wAmt1 = cl_wAmt1+"doscientos "
            CASE cl_yAmt = 3
                cl_wAmt1 = cl_wAmt1+"trescientos "
            CASE cl_yAmt = 4
                cl_wAmt1 = cl_wAmt1+"cuatrocientos "
            CASE cl_yAmt = 5
                cl_wAmt1 = cl_wAmt1+"quinientos "
            CASE cl_yAmt = 6
                cl_wAmt1 = cl_wAmt1+"seiscientos "
            CASE cl_yAmt = 7
                cl_wAmt1 = cl_wAmt1+"setecientos "
            CASE cl_yAmt = 8
                cl_wAmt1 = cl_wAmt1+"ochocientos "
            CASE cl_yAmt = 9
                cl_wAmt1 = cl_wAmt1+"novecientos "
        ENDCASE
    ENDIF

    IF VAL(cl_tAmt1) > 19
        cl_yAmt = VAL(SUBS(cl_tAmt1,2,1))
        DO CASE
            CASE cl_yAmt = 2 .AND. VAL(SUBS(cl_tAmt1,2)) = 20
                cl_wAmt1 = cl_wAmt1+"veinte "
            CASE cl_yAmt = 2 .AND. VAL(SUBS(cl_tAmt1,2)) > 20
                cl_wAmt1 = cl_wAmt1+"veinti"
            CASE cl_yAmt = 3
                cl_wAmt1 = cl_wAmt1+"treinta "
            CASE cl_yAmt = 4
                cl_wAmt1 = cl_wAmt1+"cuarenta "
            CASE cl_yAmt = 5
                cl_wAmt1 = cl_wAmt1+"cincuenta "
            CASE cl_yAmt = 6
                cl_wAmt1 = cl_wAmt1+"sesenta "
            CASE cl_yAmt = 7
                cl_wAmt1 = cl_wAmt1+"setenta "
            CASE cl_yAmt = 8
                cl_wAmt1 = cl_wAmt1+"ochenta "
            CASE cl_yAmt = 9
                cl_wAmt1 = cl_wAmt1+"noventa "
        ENDCASE
        IF VAL(SUBS(cl_tAmt1,2,2)) > 30 .AND. VAL(SUBS(cl_tAmt1,3,1)) > 0
            cl_wAmt1 = cl_wAmt1+"y "
        ENDIF
    ENDIF

    IF VAL(cl_tAmt1) > 0
        cl_yAmt = VAL(SUBS(cl_tAmt1,2,2))
        IF cl_yAmt > 9 .AND. cl_yAmt < 20
            DO CASE
                CASE cl_yAmt = 10
                    cl_wAmt1 = cl_wAmt1+"diez "
                CASE cl_yAmt = 11
                    cl_wAmt1 = cl_wAmt1+"once "
                CASE cl_yAmt = 12
                    cl_wAmt1 = cl_wAmt1+"doce "
                CASE cl_yAmt = 13
                    cl_wAmt1 = cl_wAmt1+"trece "
                CASE cl_yAmt = 14
                    cl_wAmt1 = cl_wAmt1+"catorce "
                CASE cl_yAmt = 15
                    cl_wAmt1 = cl_wAmt1+"quince "
                CASE cl_yAmt = 16
                    cl_wAmt1 = cl_wAmt1+"dieciseis "
                CASE cl_yAmt = 17
                    cl_wAmt1 = cl_wAmt1+"diecisiete "
                CASE cl_yAmt = 18
                    cl_wAmt1 = cl_wAmt1+"dieciocho "
                CASE cl_yAmt = 19
                    cl_wAmt1 = cl_wAmt1+"diecinueve "
            ENDCASE
        ELSE
            cl_yAmt = VAL(SUBS(cl_tAmt1,3,1))
            DO CASE
                CASE cl_yAmt = 1 .AND. lMil
                    cl_wAmt1 = cl_wAmt1+"un "
                CASE cl_yAmt = 1 .AND. !lMil
                    cl_wAmt1 = cl_wAmt1+"uno "
                CASE cl_yAmt = 2
                    cl_wAmt1 = cl_wAmt1+"dos "
                CASE cl_yAmt = 3
                    cl_wAmt1 = cl_wAmt1+"tres "
                CASE cl_yAmt = 4
                    cl_wAmt1 = cl_wAmt1+"cuatro "
                CASE cl_yAmt = 5
                    cl_wAmt1 = cl_wAmt1+"cinco "
                CASE cl_yAmt = 6
                    cl_wAmt1 = cl_wAmt1+"seis "
                CASE cl_yAmt = 7
                    cl_wAmt1 = cl_wAmt1+"siete "
                CASE cl_yAmt = 8
                    cl_wAmt1 = cl_wAmt1+"ocho "
                CASE cl_yAmt = 9
                    cl_wAmt1 = cl_wAmt1+"nueve "
            ENDCASE
        ENDIF
    ENDIF

RETURN cl_wAmt1


 
Adolfo A. Gaetán
Cel.: (261) 154-544812
Nextel: 54*625*2121
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Telegram invitation https://t.me/HMGWorkspace
User avatar
danielmaximiliano
Posts: 2763
Joined: Fri Apr 09, 2010 4:53 pm
DBs Used: DBF
Location: Argentina
Contact:

Re: Convertir cifras a letras

Post by danielmaximiliano »

hay otro mas pero no me deja postearlo. enviame tu mail y te lo envio
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Telegram invitation https://t.me/HMGWorkspace
User avatar
tave2009
Posts: 61
Joined: Tue Jul 14, 2009 3:33 am
Location: San Francisco, Córdoba, Argentina.

Re: Convertir cifras a letras

Post by tave2009 »

Hola Rene,
Aqui va una rutina.
Slds.
Walter

/******
*
* FUNCTION ImporteConLetra( nImporte, cMoneda )
*
*/
FUNCTION ImporteConLetra( nImporte, cMoneda )
// Declaración de variables locales------------------------------------------
local cCentavos
local nMillones
local nMiles
local cImpLet

// Por defecto Moneda vale "P"esos
cMoneda := IIf( cMoneda == nil, "P", cMoneda )

// Inicializar variables locales.--------------------------------------------
cImpLet := ""
cCentavos := right( tran( nImporte, "999999999.99" ) , 2 )
nImporte := nImporte+.005
nMillones := int( nImporte/1000000 )
if nMillones>0
nImporte:=nImporte-( nMillones*1000000 )
cImpLet := GeneraImporte( nMillones )
cImpLet := cImpLet + if( nImporte = 0, "MILLONES DE ", if( nMillones= 1, "MILLON ","MILLONES " ) )
endif
nMiles:=int( nImporte/1000 )
if nMiles>0
nImporte:=nImporte-( nMiles*1000 )
cImpLet :=cImpLet+GeneraImporte( nMiles ) +"MIL "
endif
cImpLet := cImpLet+GeneraImporte( nImporte )
cImpLet += if( cMoneda = "D", " DOLARES con " + cCentavos + "/100", " PESOS con " + cCentavos + "/100" )
RETURN( cImpLet )

/******
*
* FUNCTION GeneraImporte ( Importe )
*
*/
static FUNCTION GeneraImporte( Importe )
local ic
local id
local iu
local c
local d
local u
local re
local a_Cen
local a_Dec
local a_Uni

ic:=id:=iu:=""
c:=d:=u:=re:=0
a_Uni := {"UN ","DOS ","TRES ","CUATRO ","CINCO ","SEIS ","SIETE ","OCHO ",;
"NUEVE ","DIEZ ","ONCE ","DOCE ","TRECE ","CATORCE ","QUINCE " ,;
"DIECISEIS ","DIECISIETE ","DIECIOCHO ","DIECINUEVE ","VEINTE " ,;
"VEINTIUN ","VEINTIDOS ","VEINTITRES ","VEINTICUATRO ","VEINTICINCO ",;
"VEINTISEIS ","VEINTISIETE ","VEINTIOCHO ","VEINTINUEVE "}
a_Dec := {"DIEZ ","VEINTE ","TREINTA ","CUARENTA ","CINCUENTA ","SESENTA ",;
"SETENTA ","OCHENTA ","NOVENTA "}
a_Cen := {"CIENTO ","DOSCIENTOS ","TRESCIENTOS ","CUATROCIENTOS ","QUINIENTOS ",;
"SEISCIENTOS ","SETECIENTOS ","OCHOCIENTOS ","NOVECIENTOS "}

c := int( Importe/100 )
re := round( Importe-( c*100 ),2 )
ic := if(( c=1 .and. re=0 ) ,"CIEN ",if( c<>0,a_Cen[c],"" ) )
d := int( re/10 )
re := if( d>2,( re-( d*10 ) ) ,re )
id := if( d>2,a_Dec[d],"" )
id := if(( d>2 .and. re>=1 ) ,id+"Y ",id )
u := int( re )
iu := if( u>0 .and. u<30,a_Uni,"" )

RETURN( ic+id+iu )
Nada se pierde. Todo se transforma. (Lavoussier)
Nothing is lost. Everything changes.
rmtarget
Posts: 67
Joined: Sat Jul 04, 2009 7:28 pm

Re: Convertir cifras a letras

Post by rmtarget »

Muchas gracias amigos !! saludos cordiales
De antemano muchas gracias y saludos !!
Atte.
Rene Mtz. (méxico city)
Post Reply