none
Multiplicar valores

    Pregunta

  • Hola, me pueden ayudar a multiplicar estos valores

    Dim cantidad2 As String = String.Empty For Each row As DataGridViewRow In DataGridView2.Rows cantidad2 += String.Concat(row.Cells("Column2").Value.ToString(), vbCrLf) Next

    Dim precio2 As String = String.Empty For Each row As DataGridViewRow In DataGridView2.Rows precio2 += String.Concat(row.Cells("Column3").Value.ToString(), vbCrLf) Next

    Dim MyCantidad2 = Format(cantidad2.TrimEnd) Dim Myprecio2 = Format(precio2.TrimEnd)

    Dim MySubtotal = cantidad2.TrimEnd * precio2.TrimEnd


    En la ultima linea de código me sale el error "La conversion de la cadena en el tipo 'double' no es valida"

    Espero me puedan ayudar.

    Saludos



    martes, 22 de noviembre de 2016 1:45

Respuestas

  • Hola Pedro9089,

    Pero si la columna ya está creada solo tienes que cambiar el valor de la celda SubTotal por la multiplicación de la Cantidad y Precio de cada fila. Por lo que no sería necesario crear variables para almacenar la data.

        Private Sub btnMostrar_Click(sender As Object, e As EventArgs) Handles btnMostrar.Click
    
            For Each row As DataGridViewRow In DataGridView1.Rows
                row.Cells("SubTotal").Value = CDbl(row.Cells("Cantidad").Value) *
                                              CDbl(row.Cells("Precio").Value)
            Next
        End Sub

    Resultado : 

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:53
    martes, 22 de noviembre de 2016 20:09
  • Hola Pedro9089,

    Lo que pasa es que tu variable cantidad y precio son de tipo String, y para multiplicar números tiene que ser de un tipo numérico (Integer, Double, Decimal, etc.).

    - Porqué usas el Format ?

    - El String.Concat y el TrimEnd() es innecesario si solo quieres hacer una suma.

    *** Puedes obtener los dos valores mediante un solo recorrido.

        Dim cantidad2 As Double = 0, precio2 As Double = 0
    
        For Each row As DataGridViewRow In DataGridView2.Rows
            cantidad2 += CDbl(row.Cells("Column2").Value)
            precio2 += CDbl(row.Cells("Column3").Value)
        Next
    
        Dim MySubtotal As Double = cantidad2 * precio2
        MessageBox.Show(MySubtotal.ToString)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    martes, 22 de noviembre de 2016 3:51
  • Pedro9089,

    Debes explicar lo que intentas realizar, si deseas obtener el subtotal por cada fila debes de realizar el cálculo dentro del bucle, no debes tomar los resultados que acumulan los valores:

    Dim Cantidad As Double = 0
    Dim Precio As Double = 0
    Dim SubTotal As Double = 0
    
    For Each row As DataGridViewRow In DataGridView2.Rows
    	'Cantidad += CDbl(row.Cells("Column2").Value)
    	'Precio += CDbl(row.Cells("Column3").Value)
    
    	'Sub total por fila
    	SubTotal = CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column3").Value)
    	MessageBox.Show(SubTotal.ToString)
    Next



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    martes, 22 de noviembre de 2016 15:43
  • Pedro9089,

    En aportes anteriores ya te habían advertido que no es correcto que las variables que acumulan un valor sean de tipo cadena, y veo que sigues insistiendo en lo mismo, ¿cuál es la necesidad?.

    Noto que lo único que necesitas es obtener la sumatoria del subtotal, entonces entiendo basta con lo siguiente:

    Dim MySubtotal As Double = 0
    
    For Each row As DataGridViewRow In DataGridView2.Rows
    	MySubtotal += CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value)
    Next
    
    e.Graphics.DrawString(MySubtotal, MyLetraNormal, Brushes.Black, 720, 150)

    Intenta trabajar con el ejemplo propuesto y si tienes algún inconveniente puedes comentarlo.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:53
    martes, 22 de noviembre de 2016 16:44

Todas las respuestas

  • Hola Pedro9089 te sale ese error xq intentas multiplicar dos strings

    intenta esto:

    Dim MySubtotal = val(cantidad2) * val(precio2)

    o también convirtiendo a int los datos de cantidad2 y precio2

    Saludos y suerte


    Javier

    martes, 22 de noviembre de 2016 1:50
  • Hola Pedro9089,

    Lo que pasa es que tu variable cantidad y precio son de tipo String, y para multiplicar números tiene que ser de un tipo numérico (Integer, Double, Decimal, etc.).

    - Porqué usas el Format ?

    - El String.Concat y el TrimEnd() es innecesario si solo quieres hacer una suma.

    *** Puedes obtener los dos valores mediante un solo recorrido.

        Dim cantidad2 As Double = 0, precio2 As Double = 0
    
        For Each row As DataGridViewRow In DataGridView2.Rows
            cantidad2 += CDbl(row.Cells("Column2").Value)
            precio2 += CDbl(row.Cells("Column3").Value)
        Next
    
        Dim MySubtotal As Double = cantidad2 * precio2
        MessageBox.Show(MySubtotal.ToString)

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    martes, 22 de noviembre de 2016 3:51
  • Me pueden ayudar a hacer la multiplicación?

    Me la hace mal no con los valores de cada fila, me multiplica todo.

     Dim MySubtotal = Val(cantidad) * Val(precio) & vbCrLf

    Saludos


    martes, 22 de noviembre de 2016 15:08
  • Pedro9089,

    Debes explicar lo que intentas realizar, si deseas obtener el subtotal por cada fila debes de realizar el cálculo dentro del bucle, no debes tomar los resultados que acumulan los valores:

    Dim Cantidad As Double = 0
    Dim Precio As Double = 0
    Dim SubTotal As Double = 0
    
    For Each row As DataGridViewRow In DataGridView2.Rows
    	'Cantidad += CDbl(row.Cells("Column2").Value)
    	'Precio += CDbl(row.Cells("Column3").Value)
    
    	'Sub total por fila
    	SubTotal = CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column3").Value)
    	MessageBox.Show(SubTotal.ToString)
    Next



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:52
    martes, 22 de noviembre de 2016 15:43
  • A los valores Val(cantidad2) y Val(precio2) me los trae bien pero cuando me hace la multiplicación me la hace mal y por lo tanto me la muestra mal.

    Te muestro parte del código.

    Dim precio As String = String.Empty Dim precio2 As String = String.Empty For Each row As DataGridViewRow In DataGridView2.Rows precio += String.Concat(row.Cells("Column4").Value.ToString(), vbCrLf) precio2 = precio Next Dim cantidad As String = String.Empty Dim cantidad2 As String = String.Empty For Each row As DataGridViewRow In DataGridView2.Rows cantidad += String.Concat(row.Cells("Column2").Value.ToString(), vbCrLf) cantidad2 = cantidad Next

    Dim SubTotal As String = String.Empty For Each row As DataGridViewRow In DataGridView2.Rows SubTotal = (Val(cantidad2) * Val(precio2) & vbCrLf Next Dim MySubtotal = FormatNumber(SubTotal.TrimEnd) & vbCrLf e.Graphics.DrawString(MySubtotal, MyLetraNormal, brushes.Black, 720, 150)


    Al procedimiento de seleccionar el precio lo tengo así porque lo utilizo en otra parte también.

    Lo que hace principalmente es mostrar el subtotal de cada producto de una venta.

    martes, 22 de noviembre de 2016 16:36
  • Pedro9089,

    En aportes anteriores ya te habían advertido que no es correcto que las variables que acumulan un valor sean de tipo cadena, y veo que sigues insistiendo en lo mismo, ¿cuál es la necesidad?.

    Noto que lo único que necesitas es obtener la sumatoria del subtotal, entonces entiendo basta con lo siguiente:

    Dim MySubtotal As Double = 0
    
    For Each row As DataGridViewRow In DataGridView2.Rows
    	MySubtotal += CDbl(row.Cells("Column2").Value) * CDbl(row.Cells("Column4").Value)
    Next
    
    e.Graphics.DrawString(MySubtotal, MyLetraNormal, Brushes.Black, 720, 150)

    Intenta trabajar con el ejemplo propuesto y si tienes algún inconveniente puedes comentarlo.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:53
    martes, 22 de noviembre de 2016 16:44
  • Sigue sin funcionar, me muestra el total de la compra no el subtotal de cada producto.

    Por ejemplo: 

    Producto 1  Cant: 2 Precio: 10

    Producto 2  Cant: 3 Precio: 5

    Así quiero que me muestre:

    Producto     Cantidad    Precio  Subtotal

    Producto 1      2               10          20

    Producto 1      3               5           15

    martes, 22 de noviembre de 2016 20:00
  • Hola Pedro9089,

    Pero si la columna ya está creada solo tienes que cambiar el valor de la celda SubTotal por la multiplicación de la Cantidad y Precio de cada fila. Por lo que no sería necesario crear variables para almacenar la data.

        Private Sub btnMostrar_Click(sender As Object, e As EventArgs) Handles btnMostrar.Click
    
            For Each row As DataGridViewRow In DataGridView1.Rows
                row.Cells("SubTotal").Value = CDbl(row.Cells("Cantidad").Value) *
                                              CDbl(row.Cells("Precio").Value)
            Next
        End Sub

    Resultado : 

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Federico32113 miércoles, 23 de noviembre de 2016 19:53
    martes, 22 de noviembre de 2016 20:09
  • Necesito mostrarlo para una impresión, osea un ticket.

    Tengo un botón el cual genera el ticket con todos los datos.

    Comprendes lo que quiero ?



    martes, 22 de noviembre de 2016 20:10