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
Convertir cifras a letras
Moderator: Rathinagiri
Convertir cifras a letras
De antemano muchas gracias y saludos !!
Atte.
Rene Mtz. (méxico city)
Atte.
Rene Mtz. (méxico city)
- danielmaximiliano
- Posts: 2763
- Joined: Fri Apr 09, 2010 4:53 pm
- DBs Used: DBF
- Location: Argentina
- Contact:
Re: Convertir cifras a letras
Hola Rene :
te dejo un mail de un colega puede servirte
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
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Telegram invitation https://t.me/HMGWorkspace
- danielmaximiliano
- Posts: 2763
- Joined: Fri Apr 09, 2010 4:53 pm
- DBs Used: DBF
- Location: Argentina
- Contact:
Re: Convertir cifras a letras
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
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Telegram invitation https://t.me/HMGWorkspace
Re: Convertir cifras a letras
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 )
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.
Nothing is lost. Everything changes.
Re: Convertir cifras a letras
Muchas gracias amigos !! saludos cordiales
De antemano muchas gracias y saludos !!
Atte.
Rene Mtz. (méxico city)
Atte.
Rene Mtz. (méxico city)