none
Chart1 no reconoce un numero decimal y me crea una escala muy grande RRS feed

  • Pregunta

  • Buenas el chart1 no reconoce un numero decimal y me crea una escala muy grande

    If f_verifica_servicio() = True Then
    
                Try
    
                    Dim MIWEBCLIENT As New System.Net.WebClient
                    Dim MIHTML As String = MIWEBCLIENT.DownloadString("http://192.168.1.103")
    
                    Dim MIIP As String = MIHTML
                    MIIP = MIIP.Remove(0, MIIP.IndexOf("Temperatura en Celsius: ") + 26)
                    MIIP = MIIP.Trim() ' quita salto
                    RichTextBox1.AppendText("Temperatura: " & MIIP & vbCrLf)
                    RichTextBox1.AppendText(vbCrLf)
                    Label2.Text = MIIP & "° C"
                    Select Case MIIP
                        Case TextBox2.Text - 0.5 To TextBox2.Text + 0.5
                            TextBox1.BackColor = Color.GreenYellow
                        Case Is > TextBox2.Text + 0.5
                            TextBox1.BackColor = Color.Red
                        Case Is < TextBox2.Text + 0.5
                            TextBox1.BackColor = Color.Blue
                    End Select
                    Chart1.Series(0).Points.Add(MIIP)
                    Label4.Text = TextBox2.Text + 0.5
    
                    Call f_verifica_servicio()
    
                Catch ex As Exception
                    'MsgBox("PROBLEMAS CON LA IP PUBLICA")
    
                End Try
            Else
                Call f_verifica_servicio()
    
    
            End If

    lunes, 8 de julio de 2019 15:44

Todas las respuestas

  • Estás haciendo algo que es una pésima costumbre en VB, y que te dará problemas todo el rato si no dejas de hacerlo. Se trata de las conversiones implícitas. Estás mezclando datos de tipo String con datos de tipo numérico, y asignando los unos a los otros sin escribir expresamente la conversión. Esto hace que se conviertan usando la conversión predeterminada del sistema, que para colmo puede variar de un equipo a otro con lo que puede que tu programa funcione en unos sitios sí y en otros no.

    En particular, casi seguro que la conversión con la que estás tropezando en este caso es la que usa el punto como separador de miles en lugar de separador de decimales. Cuando el sistema está configurado así, si le pasas un número tal como "1.23" te lo interpreta como 123. Y claro, te salen números mucho más grandes de lo que esperabas.

    Revisa el programa y fíjate en todos los sitios donde tienes cosas como esta:   Label4.Text = TextBox2.Text + 0.5
    Fíjate que TextBox2.Text es de tipo String. Y al String le estás sumando 0.5 que es de tipo numérico. Esto hace internamente una conversión de String a número usando el criterio de conversión que al sistema le dé la gana, con lo que puede salir cualquier resultado. Y luego ese resultado (numérico) se lo asignas al Label4.Text que es de tipo string, con lo que se hace una conversión de número a String aplicando de nuevo el formato que al sistema le dé la gana.

    En el chart, estás metiendo la variable MIIP que es de tipo String en la colección Points del chart, que espera un dato numérico. Aunque VB hace la conversión implícitamente, si eso lo ejecutas en un ordenador que tiene configurado el punto como separador de miles, pues entonces cuando MIIP vale "1.234" te mete un punto en el chart que vale 1234.

    lunes, 8 de julio de 2019 18:51
  • Gracias Alberto
    miércoles, 17 de julio de 2019 20:30