CLR: .Net / Mono / Boo / Otros CLR > VB .NET
Duda sobre un metodo de VB 2005
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
[#] Página Siguiente
Ir a la versión completa