Entrar
¿Nuevo usuario? Inscribirme
guvoaII · GUVOA Visual Object Español
? ¿Ya estás suscrito? Entra a Yahoo!

Consejos

¿Sabías que...?
Podés cambiar el orden de los mensajes. Simplemente hacé clic en el enlace de columna fecha. Tus preferencias se guardarán, por lo tanto no necesitarás hacerlo otra vez cuando vuelvas a entrar.

Mensajes

  Mensajes Ayuda
Avanzado
RV: [guvoaII] Números a Letras.   Lista de mensajes  
Responder | Reenviar Mensaje #197 de 2800 |

Muchachos Gustavo Biasone me hizo notar un par de errores en la función que envié esta mañana, y ya está corregida.

Es bueno saber que en la lista hay gente atenta a todo lo que pasa.

Pido perdón por el error y adjunto la rutina modificada.

Les voy a pedir a quienes la adopten que me informen de cualquier error que encuentren.

Gracias.

 

FUNCTION MontoLetras(nNumeroaLetras) AS STRING

//Autor: Gerardo J. Biagiotti

//Fecha: 04/10/2005

//Lugar: Marcos Juárez (CBA) Argentina

//mail : gjbiagiotti@...

 

//El presente convierte numeros en letras

//La lectura la realiza de derecha a izquierda,

//primero con el valor entero y luego los decimales.

 

            LOCAL vUnidad,vDecena,vCentena,vDecena1,vDecena2 AS ARRAY

            LOCAL cMonto,cValorEntero,cValor AS STRING

            LOCAL cCadena1,cCadena2 AS STRING

            LOCAL nValorEntero,nValor AS USUAL

            LOCAL nPosicionMiles,nLargo,nToma3nPosicion AS INT

 

            IF nNumeroaLetras=0

                        RETURN "Cero."

            ENDIF

 

   vUnidad ={"uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"}

 

            vDecena ={"diez","veinte","treinta","cuarenta","cincuenta",;

             "sesenta","setenta","ochenta","noventa"}

 

            vDecena1={"once","doce","trece","catorce","quince",;

             "dieciseis","diecisiete","dieciocho","diecinueve"}

 

            vDecena2={"veintiuno","veintidós","veintitres","veinticuatro",;

             "veinticinco","veintiseis","veintisiete","veintiocho","veintinueve"}

 

   vCentena={"ciento","doscientos","trescientos","cuatrocientos",;

             "quinientos","seiscientos","setecientos","ochocientos","novecientos"}

 

            lSalida := FALSE

            nValorDecimales := 0

            cMonto  := ""

 

            DO WHILE !lSalida

                        IF Integer(nNumeroaLetras)<>nNumeroaLetras .AND. nValorDecimales=0  //decimales

                                   nValorDecimales:= nNumeroaLetras-Integer(nNumeroaLetras)

                                   nValorEntero   := Val(Right(Str(nValorDecimales),LENNUM(nValorDecimales)-2))

                           cValorEntero   := LTrim(Str(nValorEntero))

                                   nLargo         := Len(LTrim(Str(nValorEntero)))

                                   nPosicionMiles := 0  //de derecha a izquierda cuenta posiciones de a 3 números.

                                   nToma3         := nLargo

                                   IF nValorEntero>1

                                               cMonto := " centavos"

                                   ELSE

                                               cMonto := " centavo"

                                   ENDIF

                        ELSE

                                   nValorEntero   := Integer(nNumeroaLetras)

                        cValorEntero   := LTrim(Str(nValorEntero))

                                   nLargo         := Len(LTrim(Str(nValorEntero)))

                                   nPosicionMiles := 0  //de derecha a izquierda cuenta posiciones de a 3 números.

                                   nToma3         := nLargo

                                   lSalida := TRUE

                                   IF nValorDecimales>0 .AND. nValorEntero>0

                                               cMonto=" con "+cMonto

                                   ENDIF

                        ENDIF

 

                        DO WHILE TRUE

                                   IF nToma3<1

                                               EXIT

                                   ENDIF

                                   cValor := ""

                                   FOR nLazo=1 UPTO 3

                                    IF nToma3>=1

                                                           cValor=SubStr(cValorEntero,nToma3,1)+cValor

                                               nToma3-=1

                                      ENDIF

                                   NEXT

                                   nPosicionMiles++

 

                                   DO CASE

                                               CASE nPosicionMiles=2 //desde 1000 a 999.999

                                                           cMonto=" mil "+cMonto

                                               CASE nPosicionMiles=3 //desde 1.000.000 a 999.999.999.999

                                                           IF nValorEntero>=1000000 .AND. nValorEntero<=1999999

                                                                       cMonto=" millón "+cMonto

                                                           ELSE

                                                                       cMonto=" millones "+cMonto

                                                           ENDIF

                                               CASE nPosicionMiles=4 //desde 1.000.000.000.000 a ......

                                                           IF nValorEntero>=1000000000000 .AND. nValorEntero<=1999999999999

                                                                       cMonto=" billón "+cMonto

                                                           ELSE

                                                                       cMonto=" billones "+cMonto

                                                           ENDIF

                                   ENDCASE

 

                                   nValor := Val(cValor)

                                   nLargo := Len(cValor)

 

                                   IF nLargo=1

                                               IF nValor>0

                                                           IF nValor=1

                                                                       cMonto="un"+cMonto

                                                           ELSE

                                                                       cMonto=vUnidad[nValor]+cMonto

                                                           ENDIF

                                               ENDIF

                                   ELSE

                                               IF Val(Right(cValor,2))>0

                                                           IF nValor=1

                                                                       cMonto="un"+cMonto

                                                           ELSEIF Val(Right(cValor,2))>=11 .AND. Val(Right(cValor,2))<=19

                                                                       cMonto=vDecena1[Val(Right(cValor,2))-10]+" "+cMonto

                                                           ELSEIF Val(Right(cValor,2))>=21 .AND. Val(Right(cValor,2))<=29

                                                                       cMonto=vDecena2[Val(Right(cValor,2))-20]+" "+cMonto

                                                           ELSE

                                                                       cMonto=IIF(Val(Left(Right(cValor,2),1))>0,vDecena[Val(Left(Right(cValor,2),1))],"")+;

                                                                                               IIF(Val(Left(Right(cValor,2),1))>0 .AND. Val(Right(cValor,1))>0," y ","")+;

                                                                                               IIF(Val(Right(cValor,1))>0,vUnidad[Val(Right(cValor,1))],"")+cMonto

                                                           ENDIF

                                               ENDIF

                                               IF nLargo=3

                                                           IF nValor=100

                                                                                   cMonto="cien "+cMonto

                                                           ELSEIF Val(Left(cValor,1))>0

                                                                       cMonto=vCentena[Val(Left(cValor,1))]+" "+cMonto

                                                           ENDIF

                                               ENDIF

                                   ENDIF

                        ENDDO

            ENDDO

 

            //Pone el primer caracter en mayúsculas.

            nPosicion:=At(" ",cMonto)

            cCadena1 :=Left(cMonto,nPosicion)

            cCadena2 :=Right(cMonto,Len(cMonto)-nPosicion)

            cCadena1 :=Proper(cCadena1)

            cMonto   :=cCadena1+cCadena2+"."

 

RETURN(cMonto)

 

 

 

Gerardo J. Biagiotti
Analista de Sistemas
(2580) Marcos Juárez
Córdoba - Argentina

Mail:  gjbiagiotti@...
MSN: gerardo_biagiotti@...
         gjbiagiotti@...
         gjbiagiotti@...




Mar, 4 de Oct, 2005 7:44 pm

gjbiagiotti
Sin conexión Sin conexión
Enviar correo Enviar correo

Archivo adjunto
oledata.mso
Tipo:
application/octet-stream
Archivo adjunto
image002.jpg
Tipo:
image/jpeg
Reenviar Mensaje #197 de 2800 |
Desplegar mensajes Autor Ordenar por fecha

Muchachos Gustavo Biasone me hizo notar un par de errores en la función que envié esta mañana, y ya está corregida. Es bueno saber que en la lista hay...
Gerardo J. Biagiotti
gjbiagiotti
Sin conexión Enviar correo
4 de Oct, 2005
7:42 pm
Avanzado

Copyright © 2009 Yahoo! de Argentina S.R.L. Todos los derechos reservados.
Política de privacidad - Condiciones del Servicio - Reglas de la comunidad de Yahoo! - Ayuda