none
Problema en realizar suma RRS feed

  • Pregunta

  • Amigos tengo un modulo que desarrolle y por algún motivo no me esta realizando la suma de lo que necesito, son valores que extraigo de un sitio y no me realiza la operación suma que necesito, lo que esta haciendo es concatenarme los valores.

                                        TxtSTOCK2.Text = Stock1
                                        Stock = TxtSTOCK1.Text
                                        Stock1 = TxtSTOCK2.Text
                                        suma = Stock + Stock1
                                        TxtSTOCK.Text = suma

    me arroja en el siguiente caso 202 cuando debería sumar 22.

    por que el problema que tengo, gracias.

                                     


    jueves, 10 de agosto de 2017 21:02

Respuestas

  • El operador '+' está resolviendo la expresión como una concatenación de cadenas porque de seguro las variables 'Stock' y 'Stock1' son de tipo String, deberían ser de un tipo numérico.

    Dim Stock, Stock1, Suma As Integer
    
    Stock = Int32.Parse(TxtSTOCK1.Text)
    Stock1 = Int32.Parse(TxtSTOCK2.Text)
    Suma = Stock + Stock1
    TxtSTOCK.Text = Suma.ToString()


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 10 de agosto de 2017 21:47

Todas las respuestas

  • El operador '+' está resolviendo la expresión como una concatenación de cadenas porque de seguro las variables 'Stock' y 'Stock1' son de tipo String, deberían ser de un tipo numérico.

    Dim Stock, Stock1, Suma As Integer
    
    Stock = Int32.Parse(TxtSTOCK1.Text)
    Stock1 = Int32.Parse(TxtSTOCK2.Text)
    Suma = Stock + Stock1
    TxtSTOCK.Text = Suma.ToString()


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    jueves, 10 de agosto de 2017 21:47
  • Lo que pasa es que extraigo valores desde una web y los guardo en un textbox provisoriamente para luego quedarme solo con el valor que me sirve y necesito. por eso de principio debe ser String, no me va a funcionar si a ese valor lo dejo integer, o por lo menos así lo veo, no se si tienes una mejor idea sin modificar lo que ya tengo amigo. este es el código completo que estoy usando en mi aplicación.

     ElseIf WebBrowser1.DocumentText.Contains("Inventario otras localidades") Then
                                    Dim Stock As String = ""
                                    Stock = WebBrowser1.DocumentText.ToString
                                    TxtSTOCK1.Text = ""
                                    Dim pi, pf As Integer
                                    pi = InStr(Stock, " Más de ")
                                    pf = InStr(Stock, "hlAFSList font-compact")
                                    pf = pf + 1
                                    Stock = Mid(Stock, pi, pf)
                                    pf = InStr(Stock, "hlAFSList")
                                    Stock = Mid(Stock, 1, pf)
                                    Stock = Replace(Stock, Chr(34), "")
                                    Stock = Replace(Stock, ":", "")
                                    Stock = Replace(Stock, "</span>", "")
                                    Stock = Replace(Stock, "</div>", "")
                                    Stock = Replace(Stock, "<div class=separador>", "")
                                    Stock = Replace(Stock, "<div class=a", "")
                                    Stock = Replace(Stock, "en inventario", "")
                                    Stock = Replace(Stock, ">", "").Trim
                                    Stock = Replace(Stock, "<div class=f", "").Trim
                                    Stock = Replace(Stock, "M&#225;s de ", "").Trim
                                    Stock = Replace(Stock, "<div class=s", "").Trim
                                    Stock = Replace(Stock, "Inventario su localidad ", "").Trim
                                    Stock = Replace(Stock, "m&#225;s de", "").Trim
                                    Stock = Replace(Stock, "<a id=h", "").Trim
                                    Stock = Replace(Stock, " en Quilicura.", "").Trim
                                    Stock = CInt(Stock)
                                    TxtSTOCK1.Text = Stock
                                    'TxtActivo.Text = 1
                                    If WebBrowser1.DocumentText.Contains("Inventario otras localidades:") Then
                                        Dim Stock1 As String = ""
                                        Dim Suma As Integer
                                        Stock1 = WebBrowser1.DocumentText.ToString
                                        TxtSTOCK2.Text = ""
                                        Dim pi1, pf1 As Integer
                                        pi1 = InStr(Stock1, "Inventario otras localidades: ")
                                        pf1 = InStr(Stock1, "<div class=""btn btn-link js-add-item-to")
                                        pf1 = pf1 + 1
                                        Stock1 = Mid(Stock1, pi1, pf1)
                                        pf1 = InStr(Stock1, "<div class=")
                                        Stock1 = Mid(Stock1, 1, pf)
                                        Stock1 = Replace(Stock1, Chr(34), "")
                                        Stock1 = Replace(Stock1, "Inventario otras localidades: ", "").Trim
                                        Stock1 = Replace(Stock1, "</a>", "").Trim
                                        Stock1 = Replace(Stock1, "<div class=separador clearfix></div>", "").Trim
                                        Stock1 = CInt(Stock1)
                                        TxtSTOCK2.Text = Stock1
                                        Stock = Int32.Parse(TxtSTOCK1.Text)
                                        Stock1 = Int32.Parse(TxtSTOCK2.Text)
                                        Suma = Stock + Stock1
                                        TxtSTOCK.Text = Suma.ToString()
                                        TxtActivo.Text = 1
                                    End If
    agregue el código pero no me funciona ya que debo mantener eso almacenado así, no se que idea se te ocurre amigo que me pueda ayudar y solucionar el problema que tengo. muchas gracias por el código anterior

    viernes, 11 de agosto de 2017 1:27
  • Si colocas el string completo del código de donde sacas los valores  se podría analizar y segurametne ahorrarias mucho mediante Mid(...) tanto para un valor como para el otro, solamente buscando en esas posiciones, por otro lado una vez encontrados los cargas en una variable ej. Dim Txt1 as string e Dim Txt2 as string Para luego Dim suma As ingteger = Cdbl(Txt1) + Cdbl(Txt2)

    Saludos


    • Editado Marcelo PF viernes, 11 de agosto de 2017 2:18
    viernes, 11 de agosto de 2017 2:13
  • Entiendo. Deja el código tal y como lo tenías y convierte el tipo en la expresión de suma.

    Stock = TxtSTOCK1.Text
    Stock1 = TxtSTOCK2.Text
    suma = (Int32.Parse(Stock) + Int32.Parse(Stock1)).ToString

    Cambia el tipo según los valores que almacenan las variables 'Stock' y 'Stock1'


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    viernes, 11 de agosto de 2017 3:30
  • Hola Miguel:

     Sin lugar a dudas no te esta sumando porque como bien te lo han comentado las variables "Stock" y "Stock1" son del tipo string por lo tanto el operador "+" no funciona para realizar una operación de sumatoria sino para realizar una concatenación, sin importar que requieras que los valores sean del tipo string; para realizar la operación de suma debes de convertir las variables involucradas a un tipo de dato numérico, pero debes de tener cuidado de no intentar convertir una cadena vacía a un tipo de datos numérico porque obtendrás una bonita excepción de conversión de tipos: 

    Dim suma As Decimal = 0
    Dim stock As Decimal = 0
    Dim stock1 As Decimal = 0
    'Con el metodo TryParse conviertes al tipo Decimal y evitas una excepcion en caso de que el Cast no sea posible
    Decimal.TryParse("0.00", stock)
    Decimal.TryParse("0.00", stock1)
    
    'Haces la suma, como las variables son del tipo decimal no necesitas realizar otras acciones
    suma = stock + stock1
    Espero que la información te sea de utilidad

    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 11 de agosto de 2017 13:41