Numero a letras
Necesito saber como cambio numeros a letras si tienen alguna rutina o un scripts.
Por ejemplo: 1.000.000 Bs. Me aparesca "Un Millon BolÃvares".
Es para una factura por salio hace tiempo en una gaceta oficial que se debe colocar la cantidad en letras.
Gracias.
Por ejemplo: 1.000.000 Bs. Me aparesca "Un Millon BolÃvares".
Es para una factura por salio hace tiempo en una gaceta oficial que se debe colocar la cantidad en letras.
Gracias.
Hola Jose
Te envio una segunda opcion, esta funcion la realice como un ejercicio en el uso de funciones si tienes alguna duda escribeme y con gusto te contestare a ti y aquien le encuentre algun uso....
* ===============================================
* convierte Cantidades NUmericas en Letra
* ===============================================
Function Numlet(Num)
declare uni[9], dec[9], aux1[9], aux2[9], cien[9]
Uni[1]= "un"
Uni[2]= "dos"
Uni[3]= "tres"
Uni[4]= "cuatro"
Uni[5]= "cinco"
Uni[6]= "seis"
Uni[7]= "siete"
Uni[8]= "ocho"
Uni[9]= "nueve"
dec[1]= "diez"
dec[2]= "veinte"
dec[3]= "treinta"
dec[4]= "cuarenta"
dec[5]= "cincuenta"
dec[6]= "sesenta"
dec[7]= "setenta"
dec[8]= "ochenta"
dec[9]= "noventa"
aux1[1]= "once"
aux1[2]= "doce"
aux1[3]= "trece"
aux1[4]= "catorce"
aux1[5]= "quince"
aux1[6]= "dieciseis"
aux1[7]= "diecisiete"
aux1[8]= "dieciocho"
aux1[9]= "diecinueve"
aux2[1]= "veintiun"
aux2[2]= "veintidos"
aux2[3]= "veintitres"
aux2[4]= "veinticuatro"
aux2[5]= "veinticinco"
aux2[6]= "veintiseis"
aux2[7]= "veintisiete"
aux2[8]= "veintiocho"
aux2[9]= "veintinueve"
Cien[1]= "ciento"
Cien[2]= "doscientos"
Cien[3]= "trescientos"
Cien[4]= "cuatrocientos"
Cien[5]= "quinientos"
Cien[6]= "seiscientos"
Cien[7]= "setecientos"
Cien[8]= "ochocientos"
Cien[9]= "novecientos"
ldec=right(str(num,10,2),2)
IF NUM=0
Letra="cero"
ENDIF
If Num>0 .and. Num < 10
Letra=Uni[num]
Endif
If num>9 .and. num<100
letra=decenas(num)
endif
If num>99 .and. num<1000
letra=centenas(num)
Endif
If num>999 .and. num<10000
letra=Millar(num)
Endif
If num>9999 .and. num<100000
letra=Dmillar(num)
Endif
If num>99999 .and. num<1000000
letra=Cmillar(num)
Endif
Letra="Son "+Letra + " pesos "+ LDEC+"/100 M.N."
return Letra
Endfunc
* ===================================== rutina de Centenas de decenas de millar
Function Cmillar(Num)
Nlet=alltrim(str(num,15,2))
clet=left(nlet,6)
Numm=Val(substr(clet,1,3))
Ncen=val(substr(clet,4,1))
Diez=val(substr(clet,5,1))
Unid=Val(substr(clet,6,1))
do case
case Ncen=0 .and. Diez=0 .and. Unid=0
Letra=centenas(Numm)+" mil "
case Ncen=0 .and. diez=0 .and. UNid#0
Letra=centenas(Numm)+" mil " + Uni[UNid]
case Ncen=0 .and. diez#0
Letra=centenas(Numm)+" mil "+ decenas(val(substr(clet,5,2)))
case Ncen#0
Letra=centenas(Numm)+" mil "+ centenas(val(substr(clet,4,3)))
endcase
return Letra
Endfunc
* ===================================== rutina de decenas de millar
Function Dmillar(Num)
Nlet=alltrim(str(num,15,2))
clet=left(nlet,5)
Numm=Val(substr(clet,1,2))
Ncen=val(substr(clet,3,1))
Diez=val(substr(clet,4,1))
Unid=Val(substr(clet,5,1))
do case
case Ncen=0 .and. Diez=0 .and. Unid=0
Letra=decenas(Numm)+" mil "
case Ncen=0 .and. diez=0 .and. UNid#0
Letra=decenas(Numm)+" mil " + Uni[UNid]
case Ncen=0 .and. diez#0
Letra=decenas(Numm)+" mil "+ decenas(val(substr(clet,4,2)))
case Ncen#0
Letra=decenas(Numm)+" mil "+ centenas(val(substr(clet,3,3)))
endcase
return Letra
Endfunc
* ===================================== rutina de Unidades de millar
Function millar(Num)
nlet=alltrim(str(num,15,2))
nlet=left(nlet,4)
Nmil=Val(substr(nlet,1,1))
Ncen=val(substr(nlet,2,1))
Ndec=val(substr(nlet,3,1))
Nuni=Val(substr(nlet,4,1))
do case
case Ncen=0 .and. Ndec=0 .and. Nuni=0
Letra=Uni[Nmil]+" mil "
case Ncen=0 .and. Ndec=0 .and. Nuni#0
Letra=Uni[Nmil]+" mil " + Uni[Nuni]
case Ncen=0 .and. Ndec#0
Letra=Uni[Nmil]+" mil "+ decenas(val(substr(nlet,3,2)))
case Ncen#0
Letra=Uni[Nmil]+" mil "+ centenas(val(substr(nlet,2,3)))
endcase
return Letra
Endfunc
* ======================================= Rutina de Centenas
Function centenas(Num)
nlet=alltrim(str(num,15,2))
nlet=left(nlet,3)
Ncen=val(substr(nlet,1,1))
Ndec=val(substr(nlet,2,1))
Nuni=Val(substr(nlet,3,1))
do case
case Ncen=1 .and. Ndec=0 .and. Nuni=0
Letra="cien"
case Ncen>1 .and. Ndec=0 .and. Nuni=0
Letra=cien[Ncen]
case Ncen#0 .and. Ndec=0 .and. Nuni#0
Letra=Cien[Ncen]+" "+Uni[Nuni]
case Ncen#0 .and. Ndec#0
Letra=Cien[Ncen]+" "+Decenas(val(substr(nlet,2,2)))
Endcase
return Letra
Endfunc
* ======================================= Rutina de Decenas
Function Decenas(Num)
nlet=alltrim(str(num,15,2))
nlet=left(nlet,2)
Ndec=val(left(nlet,1))
Nuni=Val(righ(nlet,1))
If Ndec # 0 .and. Nuni=0
letra=dec[Ndec]
endif
If Ndec = 1 .and. Nuni # 0
letra=aux1[Nuni]
endif
If Ndec = 2 .and. Nuni # 0
letra=aux2[Nuni]
endif
If Ndec > 2 .and. Nuni # 0
letra=dec[Ndec]+" y "+uni[Nuni]
endif
return Letra
Endfunc
* ====================== Fin de la funcion Numlet
atentamente
Gerardo Hernandez
Te envio una segunda opcion, esta funcion la realice como un ejercicio en el uso de funciones si tienes alguna duda escribeme y con gusto te contestare a ti y aquien le encuentre algun uso....
* ===============================================
* convierte Cantidades NUmericas en Letra
* ===============================================
Function Numlet(Num)
declare uni[9], dec[9], aux1[9], aux2[9], cien[9]
Uni[1]= "un"
Uni[2]= "dos"
Uni[3]= "tres"
Uni[4]= "cuatro"
Uni[5]= "cinco"
Uni[6]= "seis"
Uni[7]= "siete"
Uni[8]= "ocho"
Uni[9]= "nueve"
dec[1]= "diez"
dec[2]= "veinte"
dec[3]= "treinta"
dec[4]= "cuarenta"
dec[5]= "cincuenta"
dec[6]= "sesenta"
dec[7]= "setenta"
dec[8]= "ochenta"
dec[9]= "noventa"
aux1[1]= "once"
aux1[2]= "doce"
aux1[3]= "trece"
aux1[4]= "catorce"
aux1[5]= "quince"
aux1[6]= "dieciseis"
aux1[7]= "diecisiete"
aux1[8]= "dieciocho"
aux1[9]= "diecinueve"
aux2[1]= "veintiun"
aux2[2]= "veintidos"
aux2[3]= "veintitres"
aux2[4]= "veinticuatro"
aux2[5]= "veinticinco"
aux2[6]= "veintiseis"
aux2[7]= "veintisiete"
aux2[8]= "veintiocho"
aux2[9]= "veintinueve"
Cien[1]= "ciento"
Cien[2]= "doscientos"
Cien[3]= "trescientos"
Cien[4]= "cuatrocientos"
Cien[5]= "quinientos"
Cien[6]= "seiscientos"
Cien[7]= "setecientos"
Cien[8]= "ochocientos"
Cien[9]= "novecientos"
ldec=right(str(num,10,2),2)
IF NUM=0
Letra="cero"
ENDIF
If Num>0 .and. Num < 10
Letra=Uni[num]
Endif
If num>9 .and. num<100
letra=decenas(num)
endif
If num>99 .and. num<1000
letra=centenas(num)
Endif
If num>999 .and. num<10000
letra=Millar(num)
Endif
If num>9999 .and. num<100000
letra=Dmillar(num)
Endif
If num>99999 .and. num<1000000
letra=Cmillar(num)
Endif
Letra="Son "+Letra + " pesos "+ LDEC+"/100 M.N."
return Letra
Endfunc
* ===================================== rutina de Centenas de decenas de millar
Function Cmillar(Num)
Nlet=alltrim(str(num,15,2))
clet=left(nlet,6)
Numm=Val(substr(clet,1,3))
Ncen=val(substr(clet,4,1))
Diez=val(substr(clet,5,1))
Unid=Val(substr(clet,6,1))
do case
case Ncen=0 .and. Diez=0 .and. Unid=0
Letra=centenas(Numm)+" mil "
case Ncen=0 .and. diez=0 .and. UNid#0
Letra=centenas(Numm)+" mil " + Uni[UNid]
case Ncen=0 .and. diez#0
Letra=centenas(Numm)+" mil "+ decenas(val(substr(clet,5,2)))
case Ncen#0
Letra=centenas(Numm)+" mil "+ centenas(val(substr(clet,4,3)))
endcase
return Letra
Endfunc
* ===================================== rutina de decenas de millar
Function Dmillar(Num)
Nlet=alltrim(str(num,15,2))
clet=left(nlet,5)
Numm=Val(substr(clet,1,2))
Ncen=val(substr(clet,3,1))
Diez=val(substr(clet,4,1))
Unid=Val(substr(clet,5,1))
do case
case Ncen=0 .and. Diez=0 .and. Unid=0
Letra=decenas(Numm)+" mil "
case Ncen=0 .and. diez=0 .and. UNid#0
Letra=decenas(Numm)+" mil " + Uni[UNid]
case Ncen=0 .and. diez#0
Letra=decenas(Numm)+" mil "+ decenas(val(substr(clet,4,2)))
case Ncen#0
Letra=decenas(Numm)+" mil "+ centenas(val(substr(clet,3,3)))
endcase
return Letra
Endfunc
* ===================================== rutina de Unidades de millar
Function millar(Num)
nlet=alltrim(str(num,15,2))
nlet=left(nlet,4)
Nmil=Val(substr(nlet,1,1))
Ncen=val(substr(nlet,2,1))
Ndec=val(substr(nlet,3,1))
Nuni=Val(substr(nlet,4,1))
do case
case Ncen=0 .and. Ndec=0 .and. Nuni=0
Letra=Uni[Nmil]+" mil "
case Ncen=0 .and. Ndec=0 .and. Nuni#0
Letra=Uni[Nmil]+" mil " + Uni[Nuni]
case Ncen=0 .and. Ndec#0
Letra=Uni[Nmil]+" mil "+ decenas(val(substr(nlet,3,2)))
case Ncen#0
Letra=Uni[Nmil]+" mil "+ centenas(val(substr(nlet,2,3)))
endcase
return Letra
Endfunc
* ======================================= Rutina de Centenas
Function centenas(Num)
nlet=alltrim(str(num,15,2))
nlet=left(nlet,3)
Ncen=val(substr(nlet,1,1))
Ndec=val(substr(nlet,2,1))
Nuni=Val(substr(nlet,3,1))
do case
case Ncen=1 .and. Ndec=0 .and. Nuni=0
Letra="cien"
case Ncen>1 .and. Ndec=0 .and. Nuni=0
Letra=cien[Ncen]
case Ncen#0 .and. Ndec=0 .and. Nuni#0
Letra=Cien[Ncen]+" "+Uni[Nuni]
case Ncen#0 .and. Ndec#0
Letra=Cien[Ncen]+" "+Decenas(val(substr(nlet,2,2)))
Endcase
return Letra
Endfunc
* ======================================= Rutina de Decenas
Function Decenas(Num)
nlet=alltrim(str(num,15,2))
nlet=left(nlet,2)
Ndec=val(left(nlet,1))
Nuni=Val(righ(nlet,1))
If Ndec # 0 .and. Nuni=0
letra=dec[Ndec]
endif
If Ndec = 1 .and. Nuni # 0
letra=aux1[Nuni]
endif
If Ndec = 2 .and. Nuni # 0
letra=aux2[Nuni]
endif
If Ndec > 2 .and. Nuni # 0
letra=dec[Ndec]+" y "+uni[Nuni]
endif
return Letra
Endfunc
* ====================== Fin de la funcion Numlet
atentamente
Gerardo Hernandez
Este ejemplo lo consegui por aqui en el Web.
* Ejemplo:
CLEAR
? Num2Word(123456.78)
* "CIENTO VEINTITRES MIL CUATROCIENTOS CINCUENTA Y SEIS PESOS 78/100 M.N."
RETURN
*-------------------------------------------
* FUNCTION Num2Word(tcNro)
*-------------------------------------------
* Pasa un Importe a Letras (Uso en Mexico)
* 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 = 'UNO ' + lcCad
CASE lnUni = 2
lcCad = 'DOS ' + lcCad
CASE lnUni = 3
lcCad = 'TRES ' + lcCad
CASE lnUni = 4
lcCad = 'CUATRO ' + lcCad
CASE lnUni = 5
lcCad = 'CINCO ' + lcCad
CASE lnUni = 6
lcCad = 'SEIS ' + lcCad
CASE lnUni = 7
lcCad = 'SIETE ' + lcCad
CASE lnUni = 8
lcCad = 'OCHO ' + lcCad
CASE lnUni = 9
lcCad = 'NUEVE ' + lcCad
ENDCASE && UNIDADES
*-- Analizo las DECENAS
DO CASE && DECENAS
CASE lnDec = 1
DO CASE
CASE lnUni = 0
lcCad = 'DIEZ '
CASE lnUni = 1
lcCad = 'ONCE '
CASE lnUni = 2
lcCad = 'DOCE '
CASE lnUni = 3
lcCad = 'TRECE '
CASE lnUni = 4
lcCad = 'CATORCE '
CASE lnUni = 5
lcCad = 'QUINCE '
CASE lnUni = 6
lcCad = 'DIECISEIS '
CASE lnUni = 7
lcCad = 'DIECISIETE '
CASE lnUni = 8
lcCad = 'DIECIOCHO '
CASE lnUni = 9
lcCad = 'DIECINUEVE '
ENDC
CASE lnDec = 2
lcCad = 'VEINTI' + lcCad
CASE lnDec = 3
lcCad = 'TREINTA ' + lcCad
CASE lnDec = 4
lcCad = 'CUARENTA ' + lcCad
CASE lnDec = 5
lcCad = 'CINCUENTA ' + lcCad
CASE lnDec = 6
lcCad = 'SESENTA ' + lcCad
CASE lnDec = 7
lcCad = 'SETENTA ' + lcCad
CASE lnDec = 8
lcCad = 'OCHENTA ' + lcCad
CASE lnDec = 9
lcCad = 'NOVENTA ' + lcCad
ENDCASE && DECENAS
*-- Analizo las centenas
DO CASE && CENTENAS
CASE lnCent = 1
lcCad = 'CIENTO ' + lcCad
CASE lnCent = 2
lcCad = 'DOSCIENTOS ' + lcCad
CASE lnCent = 3
lcCad = 'TRECIENTOS ' + lcCad
CASE lnCent = 4
lcCad = 'CUATROCIENTOS ' + lcCad
CASE lnCent = 5
lcCad = 'QUINIENTOS ' + lcCad
CASE lnCent = 6
lcCad = 'SEISCIENTOS ' + lcCad
CASE lnCent = 7
lcCad = 'SETECIENTOS ' + lcCad
CASE lnCent = 8
lcCad = 'OCHOCIENTOS ' + lcCad
CASE lnCent = 9
lcCad = 'NOVECIENTOS ' + lcCad
ENDCASE && CENTENAS
*-- Analizo la terna
DO CASE && TERNA
CASE lnTerna = 1
lcCad = lcCad
CASE lnTerna = 2
lcCad = lcCad + 'MIL '
CASE lnTerna = 3
lcCad = lcCad + 'MILLON '
CASE lnTerna = 4
lcCad = lcCad + 'BILLON '
ENDCASE && TERNA
*-- Armo el retorno terna a terna
lcRet = lcCad + lcRet
lnTerna = lnTerna + 1
ENDDO && WHILE
IF lnTerna = 1
lcRet = 'CERO '
ENDIF
RETURN lcRet + 'PESOS ' + ;
TRANSFORM(lnFrac,"99") + '/100 M.N.'
ENDFUNC
*-------------------------------------------
* Ejemplo:
CLEAR
? Num2Word(123456.78)
* "CIENTO VEINTITRES MIL CUATROCIENTOS CINCUENTA Y SEIS PESOS 78/100 M.N."
RETURN
*-------------------------------------------
* FUNCTION Num2Word(tcNro)
*-------------------------------------------
* Pasa un Importe a Letras (Uso en Mexico)
* 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 = 'UNO ' + lcCad
CASE lnUni = 2
lcCad = 'DOS ' + lcCad
CASE lnUni = 3
lcCad = 'TRES ' + lcCad
CASE lnUni = 4
lcCad = 'CUATRO ' + lcCad
CASE lnUni = 5
lcCad = 'CINCO ' + lcCad
CASE lnUni = 6
lcCad = 'SEIS ' + lcCad
CASE lnUni = 7
lcCad = 'SIETE ' + lcCad
CASE lnUni = 8
lcCad = 'OCHO ' + lcCad
CASE lnUni = 9
lcCad = 'NUEVE ' + lcCad
ENDCASE && UNIDADES
*-- Analizo las DECENAS
DO CASE && DECENAS
CASE lnDec = 1
DO CASE
CASE lnUni = 0
lcCad = 'DIEZ '
CASE lnUni = 1
lcCad = 'ONCE '
CASE lnUni = 2
lcCad = 'DOCE '
CASE lnUni = 3
lcCad = 'TRECE '
CASE lnUni = 4
lcCad = 'CATORCE '
CASE lnUni = 5
lcCad = 'QUINCE '
CASE lnUni = 6
lcCad = 'DIECISEIS '
CASE lnUni = 7
lcCad = 'DIECISIETE '
CASE lnUni = 8
lcCad = 'DIECIOCHO '
CASE lnUni = 9
lcCad = 'DIECINUEVE '
ENDC
CASE lnDec = 2
lcCad = 'VEINTI' + lcCad
CASE lnDec = 3
lcCad = 'TREINTA ' + lcCad
CASE lnDec = 4
lcCad = 'CUARENTA ' + lcCad
CASE lnDec = 5
lcCad = 'CINCUENTA ' + lcCad
CASE lnDec = 6
lcCad = 'SESENTA ' + lcCad
CASE lnDec = 7
lcCad = 'SETENTA ' + lcCad
CASE lnDec = 8
lcCad = 'OCHENTA ' + lcCad
CASE lnDec = 9
lcCad = 'NOVENTA ' + lcCad
ENDCASE && DECENAS
*-- Analizo las centenas
DO CASE && CENTENAS
CASE lnCent = 1
lcCad = 'CIENTO ' + lcCad
CASE lnCent = 2
lcCad = 'DOSCIENTOS ' + lcCad
CASE lnCent = 3
lcCad = 'TRECIENTOS ' + lcCad
CASE lnCent = 4
lcCad = 'CUATROCIENTOS ' + lcCad
CASE lnCent = 5
lcCad = 'QUINIENTOS ' + lcCad
CASE lnCent = 6
lcCad = 'SEISCIENTOS ' + lcCad
CASE lnCent = 7
lcCad = 'SETECIENTOS ' + lcCad
CASE lnCent = 8
lcCad = 'OCHOCIENTOS ' + lcCad
CASE lnCent = 9
lcCad = 'NOVECIENTOS ' + lcCad
ENDCASE && CENTENAS
*-- Analizo la terna
DO CASE && TERNA
CASE lnTerna = 1
lcCad = lcCad
CASE lnTerna = 2
lcCad = lcCad + 'MIL '
CASE lnTerna = 3
lcCad = lcCad + 'MILLON '
CASE lnTerna = 4
lcCad = lcCad + 'BILLON '
ENDCASE && TERNA
*-- Armo el retorno terna a terna
lcRet = lcCad + lcRet
lnTerna = lnTerna + 1
ENDDO && WHILE
IF lnTerna = 1
lcRet = 'CERO '
ENDIF
RETURN lcRet + 'PESOS ' + ;
TRANSFORM(lnFrac,"99") + '/100 M.N.'
ENDFUNC
*-------------------------------------------
