CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 Duda sobre un metodo de VB 2005

(1/2) > >>

Boxcarpilot:
Bueno recien empiezoe n Visual Basic 2005, despues de 5 años desde la ultima vez q use el 6.0

Tengo una tarea de varios programas, hay 1 algo raro para mi, tengo q leer un numero y volverlo palabras...

ejemplo:

0 imprime "cero"

4 imp "cuatro"

1265 imp "mil docientos sesenta y cinco"

100000 imp "cien mil"

1000000 imp "un millon"


Como hago eso?????????
Q debo importar??
solo se me ocurre un for por logica, pero mas nada, help, alguien q me de un ejemplito

GRacias

Sagma:
hola que tal, fijate esto lo encontre en google.


--- Código: vb.net --- Public Function Num2Text(ByVal value As Double) As String    Select Case value        Case 0 : Num2Text = "CERO"        Case 1 : Num2Text = "UN"        Case 2 : Num2Text = "DOS"        Case 3 : Num2Text = "TRES"        Case 4 : Num2Text = "CUATRO"        Case 5 : Num2Text = "CINCO"        Case 6 : Num2Text = "SEIS"        Case 7 : Num2Text = "SIETE"        Case 8 : Num2Text = "OCHO"        Case 9 : Num2Text = "NUEVE"        Case 10 : Num2Text = "DIEZ"        Case 11 : Num2Text = "ONCE"        Case 12 : Num2Text = "DOCE"        Case 13 : Num2Text = "TRECE"        Case 14 : Num2Text = "CATORCE"        Case 15 : Num2Text = "QUINCE"        Case Is <; 20 : Num2Text = "DIECI" & Num2Text(value - 10)        Case 20 : Num2Text = "VEINTE"        Case Is <; 30 : Num2Text = "VEINTI" & Num2Text(value - 20)        Case 30 : Num2Text = "TREINTA"        Case 40 : Num2Text = "CUARENTA"        Case 50 : Num2Text = "CINCUENTA"        Case 60 : Num2Text = "SESENTA"        Case 70 : Num2Text = "SETENTA"        Case 80 : Num2Text = "OCHENTA"        Case 90 : Num2Text = "NOVENTA"        Case Is <; 100 : Num2Text = Num2Text(Int(value  10) * 10) & " Y " & Num2Text(value Mod 10)        Case 100 : Num2Text = "CIEN"        Case Is <; 200 : Num2Text = "CIENTO " & Num2Text(value - 100)        Case 200, 300, 400, 600, 800 : Num2Text = Num2Text(Int(value  100)) & "CIENTOS"        Case 500 : Num2Text = "QUINIENTOS"        Case 700 : Num2Text = "SETECIENTOS"        Case 900 : Num2Text = "NOVECIENTOS"        Case Is <; 1000 : Num2Text = Num2Text(Int(value  100) * 100) & " " & Num2Text(value Mod 100)        Case 1000 : Num2Text = "MIL"        Case Is <; 2000 : Num2Text = "MIL " & Num2Text(value Mod 1000)        Case Is <; 1000000 : Num2Text = Num2Text(Int(value  1000)) & " MIL"            If value Mod 1000 Then Num2Text = Num2Text & " " & Num2Text(value Mod 1000)        Case 1000000 : Num2Text = "UN MILLON"        Case Is <; 2000000 : Num2Text = "UN MILLON " & Num2Text(value Mod 1000000)        Case Is <; 1000000000000.0# : Num2Text = Num2Text(Int(value / 1000000)) & " MILLONES "            If (value - Int(value / 1000000) * 1000000) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000) * 1000000)        Case 1000000000000.0# : Num2Text = "UN BILLON"        Case Is <; 2000000000000.0# : Num2Text = "UN BILLON " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#)        Case Else : Num2Text = Num2Text(Int(value / 1000000000000.0#)) & " BILLONES"            If (value - Int(value / 1000000000000.0#) * 1000000000000.0#) Then Num2Text = Num2Text & " " & Num2Text(value - Int(value / 1000000000000.0#) * 1000000000000.0#)    End SelectEnd Function  
este dato lo saque de esta direccion:

http://msmvps.com/blogs/jvargas/pages/convertirnumeroletras.aspx

suerte  :comp:

elultimoguerrero:
Que tal Boxcarpilot, lo que yo entiendo que tu quieres hacer es que cuando introduzcas un número el sistema te muestra la cantidad en letras, es muy sencillo hacerlo, nuestro compañero sagma te ha proporcionado una buena solución, yo lo hago de la siguente forma, espero te pueda ayudar. Vamos a poner dos cajas de texto en nuestro formulario a una la llamaremos tnumeros y a otra tletras, damos doble clic a la caja tletras y escribimos el siguiente código:

Try
    If IsNumeric(Me.tnumeros.Text) Then
        Me.tletras.Text = Modletras.Convertir( _
        CLng(Me.tnumeros.Text), False)
    Else
        Me.tletras.Text = ""
    End If
Catch
    Me.tletras.Text = "Error."
End Try

Para esto vamos a agregar un módulo al que llamaremos Modletras (esta es una variable global para que no tengas que hacerlo en cada uno de los formularios) y agregamos el siguiente código:

Option Explicit On
Option Strict On

Module Modletras
    Public Function Convertir(ByVal Valor As Int64, Optional ByVal esCorto As Boolean = False) As String

        REM aUnidades  ' Unidades
        REM a1DecenasL ' Decenas Largo 10
        REM a1DecenasC ' Decenas Corto 10
        REM a2DecenasE ' Decenas Exact 20-90
        REM a2DecenasL ' Decenas Largo 20-90
        REM a2DecenasC ' Decenas Corto 20-90
        REM aCentenas  ' Centenas
        REM aMillares  ' Millares

        Dim aUnidades As String() = {"", "UNO", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE"}
        Dim a1DecenasL As String() = {"DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIEZ Y SEIS", "DIEZ Y SIETE", "DIEZ Y OCHO", "DIEZ Y NUEVE"}
        Dim a1DecenasC As String() = {"DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE"}
        Dim a2DecenasE As String() = {"", "->ERROR<-", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA"}
        Dim a2DecenasL As String() = {"", "->ERROR<-", "VEINTE Y ", "TREINTA Y ", "CUARENTA Y ", "CINCUENTA Y ", "SESENTA Y ", "SETENTA Y ", "OCHENTA Y ", "NOVENTA Y "}
        Dim a2DecenasC As String() = {"", "->ERROR<-", "VEINTI", "TREINTI", "CUARENTI", "CINCUENTI", "SESENTI", "SETENTI", "OCHENTI", "NOVENTI"}
        Dim aCentenas As String() = {"", "CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS"}
        Dim aMillares As String() = {"", " MIL ", " MILLONES ", " MIL MILLONES ", " BILLONES ", " MIL BILLONES ", " TRILLONES ", " MIL TRILLONES ", "->ERROR<-", "->ERROR<-"}

        Dim CadenaFinal As String = ""
        Dim CadenaTemp As String = ""

        Dim Numero As Int64 = Valor
        Dim Millon As Integer = 0

        Dim Unidades As Integer
        Dim Decenas As Integer
        Dim Centenas As Integer

        Do While Numero > 0
            CadenaTemp = ""

            Unidades = CInt(Numero Mod 10)
            Decenas = CInt((Numero  10) Mod 10)
            Centenas = CInt((Numero  100) Mod 10)

            'Centenas
            If Centenas <> 0 Then
                If Centenas = 1 And Decenas + Unidades = 0 Then
                    CadenaTemp &= "CIEN"
                ElseIf Decenas + Unidades = 0 Then
                    CadenaTemp &= aCentenas(Centenas)
                Else
                    CadenaTemp &= aCentenas(Centenas) & " "
                End If
            End If

            'Decenas
            If Decenas <> 0 Then
                If esCorto Then
                    If Decenas = 1 Then
                        CadenaTemp &= a1DecenasC(Unidades)
                    ElseIf Unidades > 0 Then
                        CadenaTemp &= a2DecenasC(Decenas)
                    Else
                        CadenaTemp &= a2DecenasE(Decenas)
                    End If
                Else
                    If Decenas = 1 Then
                        CadenaTemp &= a1DecenasL(Unidades)
                    ElseIf Unidades > 0 Then
                        CadenaTemp &= a2DecenasL(Decenas)
                    Else
                        CadenaTemp &= a2DecenasE(Decenas)
                    End If
                End If
            End If

            'Unidades
            If Unidades <> 0 Then
                If Decenas <> 1 Then
                    If Unidades = 1 And Millon <> 0 Then
                        CadenaTemp &= "UN"
                    Else
                        CadenaTemp &= aUnidades(Unidades)
                    End If
                End If
            End If

            'Millares
            If Centenas + Decenas + Unidades <> 0 Then
                If Centenas + Decenas = 0 And Unidades = 1 And (Millon = 2 Or Millon = 4 Or Millon = 6) Then
                    Select Case Millon
                        Case Is = 2
                            CadenaTemp &= " MILLON "
                        Case Is = 4
                            CadenaTemp &= " BILLON "
                        Case Is = 6
                            CadenaTemp &= " TRILLON "
                    End Select
                Else
                    CadenaTemp &= aMillares(Millon)
                End If
            End If

            CadenaFinal = CadenaTemp & CadenaFinal
            Numero = 1000
            Millon += 1
        Loop

        Return CadenaFinal
    End Function
End Module

Existen muchas formas de lograr esta función, pero yo me adapté mucho a esta porque la uso para muchos formularios, estudia la solución de sagma y tu ya decidirás cual te conviene más, saludos.

elultimoguerrero:
Boxcarpilot, en el código que te mandé se le da doble clic  a la caja con el nombre de tnumeros y no a la tletras, lo que pasa es que tuve un error de escritura y me equivoqué, hay para que lo corrijas, saludos.

Boxcarpilot:
bueno gracias a ambos, como mencionaba no veia el lenguaje visual desde hace 5 años-...
otra cosa el programa solo puede ser ejecutado en modo consola, por ahora, luego lo paso a grafico.

Lo de un modulo NO se q es....  el rem me suena... no lo recuerdo...
vaya cuando uno no toca algo se pierde... siento como si volviera a empezar....

lo del try no es necesario luego hare las validaciones...

pregunta, usas programacion orientada a obj o estruc???

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa