FoxPro/Visual FoxPro - PASAR DE MANERA SIMPLE NUMEROS A LETRAS

 
Vista:

PASAR DE MANERA SIMPLE NUMEROS A LETRAS

Publicado por willian ordoñez (2 intervenciones) el 18/07/2007 23:22:05
HOLA SALUDOS A TODOS Y GRACIAS DE ANTEMANO, ESTOY HACIENDO UNA APLICACION PARA IMPRIMIR UNA FACTURA PERO NO SE COMO PASAR DE FORMA SENCILLA EL VALOR TOTAL DE UNA FACTURA GENERADO POR CALCULOS EN UN FORMULARIO A LETRAS HAY ALGUNA FUNCIO ESPECIFICA O ALGUIEN ME PODRIA AYUDAR PARA LOGRARLO.... GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:PASAR DE MANERA SIMPLE NUMEROS A LETRAS

Publicado por Ernesto Hernandez (4623 intervenciones) el 19/07/2007 01:59:21
prueba esto

*-----------------------------------------
* FUNCTION N2L(tnNro, tnFlag)
*---------------------------------------
* Devuelve un número entero en letras
* Usada por Let2Num (deben estar ambas)
* USO: ? N2L(32) -> TREINTA Y DOS
* RETORNA: Caracter
*---------------------------------------
FUNCTION N2L(tnNro, tnFlag)
IF EMPTY(tnFlag)
tnFlag = 0
ENDIF
LOCAL lnEntero, lcRetorno, lnTerna, lcMiles, ;
lcCadena, lnUnidades, lnDecenas, lnCentenas,tlbandera
lnEntero = INT(tnNro)
lcRetorno = ''
lnTerna = 1
DO WHILE lnEntero > 0
lcCadena = ''
lnUnidades = MOD(lnEntero, 10)
lnEntero = INT(lnEntero / 10)
lnDecenas = MOD(lnEntero, 10)
lnEntero = INT(lnEntero / 10)
lnCentenas = MOD(lnEntero, 10)
lnEntero = INT(lnEntero / 10)

*--- Analizo la terna
DO CASE
CASE lnTerna = 1
lcMiles = ''
CASE lnTerna = 2 AND (lnUnidades + lnDecenas + lnCentenas # 0)
lcMiles = 'MIL '
CASE lnTerna = 3 AND (lnUnidades + lnDecenas + lnCentenas # 0)
lcMiles = IIF(lnUnidades = 1 AND lnDecenas = 0 AND ;
lnCentenas = 0, 'MILLON ', 'MILLONES ')
CASE lnTerna = 4 AND (lnUnidades + lnDecenas + lnCentenas # 0)
lcMiles = 'MIL MILLONES '
CASE lnTerna = 5 AND (lnUnidades + lnDecenas + lnCentenas # 0)
lcMiles = IIF(lnUnidades = 1 AND lnDecenas = 0 AND ;
lnCentenas = 0, 'BILLON ', 'BILLONES ')
CASE lnTerna > 5
lcRetorno = ' ERROR: NUMERO DEMASIADO GRANDE '
EXIT
ENDCASE

*--- Analizo las unidades
DO CASE
CASE lnUnidades = 1
lcCadena = IIF(MOD(lnTerna,2) = 0, 'UN ', ;
IIF(lnTerna = 1 AND NOT tlBandera, 'UNO ', 'UN '))
CASE lnUnidades = 2
lcCadena = 'DOS '
CASE lnUnidades = 3
lcCadena = 'TRES '
CASE lnUnidades = 4
lcCadena = 'CUATRO '
CASE lnUnidades = 5
lcCadena = 'CINCO '
CASE lnUnidades = 6
lcCadena = 'SEIS '
CASE lnUnidades = 7
lcCadena = 'SIETE '
CASE lnUnidades = 8
lcCadena = 'OCHO '
CASE lnUnidades = 9
lcCadena = 'NUEVE '
ENDCASE

*--- Analizo las decenas
DO CASE
CASE lnDecenas = 1
DO CASE
CASE lnUnidades = 0
lcCadena = 'DIEZ '
CASE lnUnidades = 1
lcCadena = 'ONCE '
CASE lnUnidades = 2
lcCadena = 'DOCE '
CASE lnUnidades = 3
lcCadena = 'TRECE '
CASE lnUnidades = 4
lcCadena = 'CATORCE '
CASE lnUnidades = 5
lcCadena = 'QUINCE '
OTHER
lcCadena = 'DIECI' + lcCadena
ENDCASE
CASE lnDecenas = 2
lcCadena = IIF(lnUnidades = 0, 'VEINTE ', 'VEINTI') + lcCadena
CASE lnDecenas = 3
lcCadena = 'TREINTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 4
lcCadena = 'CUARENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 5
lcCadena = 'CINCUENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 6
lcCadena = 'SESENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 7
lcCadena = 'SETENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 8
lcCadena = 'OCHENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
CASE lnDecenas = 9
lcCadena = 'NOVENTA ' + IIF(lnUnidades = 0, '', 'Y ') + lcCadena
ENDCASE

*--- Analizo las centenas
DO CASE
CASE lnCentenas = 1
lcCadena = IIF(lnUnidades = 0 AND lnDecenas = 0, ;
'CIEN ', 'CIENTO ') + lcCadena
CASE lnCentenas = 2
lcCadena = 'DOSCIENTOS ' + lcCadena
CASE lnCentenas = 3
lcCadena = 'TRESCIENTOS ' + lcCadena
CASE lnCentenas = 4
lcCadena = 'CUATROCIENTOS ' + lcCadena
CASE lnCentenas = 5
lcCadena = 'QUINIENTOS ' + lcCadena
CASE lnCentenas = 6
lcCadena = 'SEISCIENTOS ' + lcCadena
CASE lnCentenas = 7
lcCadena = 'SETECIENTOS ' + lcCadena
CASE lnCentenas = 8
lcCadena = 'OCHOCIENTOS ' + lcCadena
CASE lnCentenas = 9
lcCadena = 'NOVECIENTOS ' + lcCadena
ENDCASE
*--- Armo el retorno terna a terna
lcRetorno = lcCadena + lcMiles + lcRetorno
lnTerna = lnTerna + 1
ENDDO
IF lnTerna = 1
lcRetorno = 'CERO '
ENDIF
RETURN lcRetorno
ENDFUNC

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 20
Ha aumentado su posición en 2 puestos en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

RE:PASAR DE MANERA SIMPLE NUMEROS A LETRAS

Publicado por marcelo (186 intervenciones) el 19/07/2007 02:13:04
te paso otra forma
function(numalet)
n1='un'
n2='dos'
n3='tres'
n4='cuatro'
n5='cinco'
n6='seis'
n7='siete'
n8='ocho'
n9='nueve'
n10='diez'
n11='once'
n12='doce'
n13='trece'
n14='catorce'
n15='quince'
n16='dieciseis'
n17='diecisiete'
n18='dieciocho'
n19='diecinueve'
n20='veinte'
n30='treinta'
n40='cuarenta'
n50='cincuenta'
n60='sesenta'
n70='setenta'
n80='ochenta'
n90='noventa'
n100='ciento'
n200='doscientos'
n300='trescientos'
n400='cuatrocientos'
n500='quinientos'
n600='seiscientos'
n700='setecientos'
n800='ochocientos'
n900='novecientos'
contador=1
inicio=1
cadena0=str(numalet,12,2)
cadena=substr(cadena0,1,9)
if cadena+'.00'=cadena0
fin=''
else
fin=' con '+substr(cadena0,11,2)+' centavos'
endif
enletra=''
if numalet=0
enletra='cero'
RETURN(enletra)
endif
if numalet=1
enletra='un peso'
RETURN(enletra)
endif
moneda=' pesos'
if val(cadena)=0
moneda=' centavos'
fin=''
cadena=space(7)+substr(cadena0,11,2)
endif
do while contador<4
subcadena=substr(cadena,inicio,3)
centena=substr(subcadena,1,1)+'00'
decena=substr(subcadena,2,2)
unidad=substr(subcadena,3,1)
if val(subcadena) > 99
if val(decena) = 0 .and. centena='100'
enletra=enletra+'cien '
else
enletra=enletra+n¢ena.+' '
endif
endif
t=val(decena)
if t > 0
do case
case (int(t/10)=t/10).or.(t>9.and.t<20)
enletra=enletra+n&decena
case t > 9.and.(int(t/10)#t/10)
decena=substr(decena,1,1)+'0'
if decena#'20'
enletra=enletra+n&decena.+' y '+n&unidad
else
enletra=enletra+'venti'+n&unidad
endif
case t < 10
enletra=enletra+n&unidad
endcase
endif
if numalet > 999999.and.contador=1
enletra=trim(enletra)+' millones '
endif
if trim(enletra)='un millones'
enletra='un millón '
endif
if numalet > 999.and.contador=2.and.val(subcadena) > 0
enletra=trim(enletra)+' mil '
endif
inicio=contador*3+1
contador=contador+1
enddo
if trim(enletra)=='un millón'
enletra=trim(enletra)+' de '
endif
enletra=trim(enletra)+moneda+fin
RETURN(enletra)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PASAR DE MANERA SIMPLE NUMEROS A LETRAS

Publicado por Luighi (105 intervenciones) el 19/07/2007 17:41:54
aqui te dejo un enlace
http://www.lawebdelprogramador.com/codigo/enlace.php?idp=516&id=34&texto=FoxPro/Visual+FoxPro
con eso podras convertir a letras el numero entero positivo que se te plazca
el programa es un sencillo prg y se llama ntol.prg
como se usa?
facil, ejemplo:
? ntol(12457281)
y devuelve: doce millones cuatrocientos cincuentisiete mil doscientos ochentiuno
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar