Viernes 8 de Noviembre de 2024, 12:34
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
VB .NET
(Moderador:
ElNapster
) »
Duda sobre un metodo de VB 2005
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Duda sobre un metodo de VB 2005 (Leído 2175 veces)
Boxcarpilot
Nuevo Miembro
Mensajes: 11
Duda sobre un metodo de VB 2005
«
en:
Martes 22 de Septiembre de 2009, 06:18 »
0
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
Tweet
Sagma
Miembro MUY activo
Mensajes: 390
Nacionalidad:
Re: Duda sobre un metodo de VB 2005
«
Respuesta #1 en:
Martes 22 de Septiembre de 2009, 15:25 »
0
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
Select
End
Function
este dato lo saque de esta direccion:
http://msmvps.com/blogs/jvargas/pages/convertirnumeroletras.aspx
suerte
Sagma
elultimoguerrero
Nuevo Miembro
Mensajes: 19
Re: Duda sobre un metodo de VB 2005
«
Respuesta #2 en:
Miércoles 23 de Septiembre de 2009, 02:14 »
0
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
Nuevo Miembro
Mensajes: 19
Re: Duda sobre un metodo de VB 2005
«
Respuesta #3 en:
Miércoles 23 de Septiembre de 2009, 02:24 »
0
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
Nuevo Miembro
Mensajes: 11
Re: Duda sobre un metodo de VB 2005
«
Respuesta #4 en:
Miércoles 23 de Septiembre de 2009, 04:23 »
0
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???
elultimoguerrero
Nuevo Miembro
Mensajes: 19
Re: Duda sobre un metodo de VB 2005
«
Respuesta #5 en:
Miércoles 23 de Septiembre de 2009, 18:53 »
0
Ok Boxcarpilot, un módulo lo agregas de esta forma, agregar... módulo, esta función yo la utilizo en este ejemplo como una variable global, es decir, imagínate que tengas 5, 10, 20 ó más formularios donde tengas que convertir numeros a letras, yo este módulo lo delcaro como una variable global, es decir que todos esos 5 módulos la podrán utilizar, lo único que estaría poniendo en cada módulo es el código de la caja de texto a la que le di doble clic, si yo lo hiciera de manera individual tendría que agregar un módulo por cada formulario, obviamente existen otras códigos que hacen este tipo de conversiones pero la verdad no los tengo a la mano, mi programación está orientada a objetos, los formularios, cajas de textos, bases de datos, etc, espero te haya ayudado con tus dudas, seguimos colaborando.
Boxcarpilot
Nuevo Miembro
Mensajes: 11
Re: Duda sobre un metodo de VB 2005
«
Respuesta #6 en:
Jueves 24 de Septiembre de 2009, 05:44 »
0
bueno gracias
mira el punto esq este programa yo la habia hecho ya, pero fue en java, aun lo tengo en java...
pense q pasarlo a VB seria facil... veo q no
No he podido... reprobare pero le pedire alguna orientacion al profesor, gracias por su ayuda amigos
Estoy pasandolo a modo consola, todo bien pero cuando pongo los numeros 101, 201, 301, 1455, no puede realizarse:
Código: vb.net
Module Module1
Sub
Main
(
)
Dim
Num2
As
String
Dim
val
As
Integer
Console.
WriteLine
(
" Conversion de Numeros "
)
Console.
WriteLine
(
" "
)
Console.
WriteLine
(
"Coloque el Numero a Convertir :"
)
val
=
Console.
ReadLine
(
)
Select
Case
val
Case
0
: Num2
=
"CERO"
Case
1
: Num2
=
"UN"
Case
2
: Num2
=
"DOS"
Case
3
: Num2
=
"TRES"
Case
4
: Num2
=
"CUATRO"
Case
5
: Num2
=
"CINCO"
Case
6
: Num2
=
"SEIS"
Case
7
: Num2
=
"SIETE"
Case
8
: Num2
=
"OCHO"
Case
9
: Num2
=
"NUEVE"
Case
10
: Num2
=
"DIEZ"
Case
11
: Num2
=
"ONCE"
Case
12
: Num2
=
"DOCE"
Case
13
: Num2
=
"TRECE"
Case
14
: Num2
=
"CATORCE"
Case
15
: Num2
=
"QUINCE"
Case
Is
<
20
: Num2
=
"DIECI"
&
Num2
(
val
-
10
)
Case
20
: Num2
=
"VEINTE"
Case
Is
<
30
: Num2
=
"VEINTI"
&
Num2
(
val
-
20
)
Case
30
: Num2
=
"TREINTA"
Case
40
: Num2
=
"CUARENTA"
Case
50
: Num2
=
"CINCUENTA"
Case
60
: Num2
=
"SESENTA"
Case
70
: Num2
=
"SETENTA"
Case
80
: Num2
=
"OCHENTA"
Case
90
: Num2
=
"NOVENTA"
Case
Is
<
100
: Num2
=
Num2
&
(
Int
(
val
10
)
*
10
)
&
" Y "
&
Num2
(
val
Mod
10
)
Case
100
: Num2
=
"CIEN"
Case
Is
<
200
: Num2
=
"CIENTO "
&
Num2
(
val
-
100
)
Case
200
,
300
,
400
,
600
,
800
: Num2
=
"Num2"
&
(
Int
(
val
100
)
)
&
"CIENTOS"
Case
500
: Num2
=
"QUINIENTOS"
Case
700
: Num2
=
"SETECIENTOS"
Case
900
: Num2
=
"NOVECIENTOS"
Case
Is
<
1000
: Num2
=
"Num2"
&
(
Int
(
val
100
)
*
100
)
&
" "
&
"Num2"
&
(
val
Mod
100
)
Case
1000
: Num2
=
"MIL"
Case
Is
<
2000
: Num2
=
"MIL "
&
Num2
(
val
Mod
1000
)
Case
Is
<
1000000
: Num2
=
Num2
(
Int
(
val
1000
)
)
&
" MIL"
If
val
Mod
1000
Then
Num2
=
Num2
&
" "
&
Num2
(
val
Mod
1000
)
Case
1000000
: Num2
=
"UN MILLON"
Case
Else
Console.
WriteLine
(
)
End
Select
Console.
WriteLine
(
" "
)
Console.
WriteLine
(
Num2
)
Console.
ReadKey
(
)
End
Sub
End
Module
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
CLR: .Net / Mono / Boo / Otros CLR
»
VB .NET
(Moderador:
ElNapster
) »
Duda sobre un metodo de VB 2005