Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: PETTETE en 29 Marzo 2017, 12:02 PM

Título: STRING---INTEGER
Publicado por: PETTETE en 29 Marzo 2017, 12:02 PM
Hola buenas,

si tengo la opción "option strict = off"
me haria falta poner el "CInt" para pasar de string a integer?

ejemplo

i=CInt(val("10 * 25"))

o solo con poner

i= val("10*25" ) sería suficiente?

gracias.

Un saludo de vuestro amigo y vecino,
PETETE;)
Título: Re: STRING---INTEGER
Publicado por: fary en 29 Marzo 2017, 14:31 PM
Hola,

Código (vb) [Seleccionar]
CInt(Val("10 * 25"))

Esto en concreto no te lo va a convertir en entero, ya que ningún numero contiene un '*'.

Sería así:

Código (vb) [Seleccionar]
Dim i As Integer
   
Dim n1, n2 As Integer
   
n1 = Val("10")
n2 = Val("25")
   
i = CInt(n1 * n2)


Visual Basic nos hace muchas conversiones automaticamente, aunque esto no debería ser motivo para que nosotros no hagamos las conversiones correctamente, recuerda que en la mayoría de los lenguajes la vas a tener que hacer....

Para que te hagas una idea, con este codigo tendrías el mismo resultado:

Código (vb) [Seleccionar]
Dim i As Integer
   
Dim n1, n2 As Integer
   
n1 = "10"
n2 = "25"
   
i = n1 * n2
   
MsgBox i



Incluso nos vuelve a convertir el numero en cadena para poder hacer el MsgBox... Se puede, SI, pero no es lo mas recomendable.

saludos.
Título: Re: STRING---INTEGER
Publicado por: okik en 2 Abril 2017, 11:24 AM
Para empezar si pones:
i=CInt(val("10 * 25"))
suponiendo que  i sea String, estás pasando Integer a String y no al revés.

Val devolvería el primer valor númerico de la cadena

Que yo sepa NO EXISTE 'Option Strict On/Off' en VB6, pero SÍ en VB.NET

Con Option Strict Off puedes pasar Integer a String sin preblemas.
Código (vbnet) [Seleccionar]

Option Strict Off
Module Module1

   Sub Main()
       Dim Valor As String = Val("10 * 25")
       Console.WriteLine(Valor)
       Console.ReadLine()
   End Sub

End Module


Si lo que quieres es resolver la ecuación, se me ocurre así

Código (vbnet) [Seleccionar]

       Dim Valor As String = "10 * 25"
       Dim t() As String
       t = Valor.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
        If Char.IsNumber(t(0)) And Char.IsNumber(t(2)) Then
       Console.WriteLine(t(0) * t(2))
       End If
       Console.ReadLine()




Para otros operadores:

Código (vbnet) [Seleccionar]
 Dim Valor As String = "10 - 25"
       Dim t() As String
       t = Valor.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
           If Char.IsNumber(t(0)) And Char.IsNumber(t(2)) Then
           Select Case t(1)
               Case "*" : Console.WriteLine(t(0) * t(2))
               Case "/" : Console.WriteLine(t(0) / t(2))
               Case "+" : Console.WriteLine(CInt(t(0)) + CInt(t(2)))
               Case "-" : Console.WriteLine(t(0) - t(2))
           End Select
       End If
       Console.ReadLine()