Foro de elhacker.net

Programación => 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
  1. 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
  1. Dim i As Integer
  2.  
  3. Dim n1, n2 As Integer
  4.  
  5. n1 = Val("10")
  6. n2 = Val("25")
  7.  
  8. 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
  1. Dim i As Integer
  2.  
  3. Dim n1, n2 As Integer
  4.  
  5. n1 = "10"
  6. n2 = "25"
  7.  
  8. i = n1 * n2
  9.  
  10. 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:
Código:
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
  1. Option Strict Off
  2. Module Module1
  3.  
  4.    Sub Main()
  5.        Dim Valor As String = Val("10 * 25")
  6.        Console.WriteLine(Valor)
  7.        Console.ReadLine()
  8.    End Sub
  9.  
  10. End Module
  11.  

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

Código
  1.        Dim Valor As String = "10 * 25"
  2.        Dim t() As String
  3.        t = Valor.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
  4.         If Char.IsNumber(t(0)) And Char.IsNumber(t(2)) Then
  5.        Console.WriteLine(t(0) * t(2))
  6.        End If
  7.        Console.ReadLine()
  8.  



Para otros operadores:

Código
  1.  Dim Valor As String = "10 - 25"
  2.        Dim t() As String
  3.        t = Valor.Split({" "}, StringSplitOptions.RemoveEmptyEntries)
  4.            If Char.IsNumber(t(0)) And Char.IsNumber(t(2)) Then
  5.            Select Case t(1)
  6.                Case "*" : Console.WriteLine(t(0) * t(2))
  7.                Case "/" : Console.WriteLine(t(0) / t(2))
  8.                Case "+" : Console.WriteLine(CInt(t(0)) + CInt(t(2)))
  9.                Case "-" : Console.WriteLine(t(0) - t(2))
  10.            End Select
  11.        End If
  12.        Console.ReadLine()