none
sumar los elementos de un listbox

    Pregunta

  • hola gracias por ller mi pregunta, necesito sumar los elementos de un listbox, tengo un listbo que almacena el cada costo de un producto, sungamos que al final son 5 prodcutos que cuestas 10 pesos, el listbos de precios tiene y elementos de 10

    y abajo de listbox tengo un lbl que debe mostras la suma de los elementos del listbox, parece se sencillo solo que no se como hacerlo agradesco su tiempo muchas gracias

    domingo, 06 de marzo de 2011 10:42

Respuestas

  • No tienes más que iterar sobre los elementos del listbox con un bucle, convertirlos a numéricos (esto depende de cómo los hayas metido y de que sea un listbox de winforms o de webforms), y acumular el valor numérico en una variable. Te quedaría más o menos así:

    decimal suma = 0;
    foreach (var item in Listbox1.Items)
    {
      decimal d = Convert.ToDecimal(item); //OJO solo para Winforms y si se metieron los items con un formato compatible con Decimal
      suma += d;
    }
    Label1.Text = suma.ToString();
    
    domingo, 06 de marzo de 2011 11:37
    Moderador
  • Te explico... el bloque de código foreach tiene esa estructura, escribes foreach y a continuación pulsas 2 veces seguidas la tecla Tab(tabulador) y se completa el código, solo debes sustituir items por un nombre que deseas usar en el ciclo, lo que hace es declarar esa variable, en este caso item de tipo var (el que debes sutituir (si gustas, porque después casteas) por el tipo de datos, en este caso supongo que sera Double), luego el ciclo se completa por cada elemento que hay en la lista... Espero que te quede mas claro amigo...

    ahora, es obvio que te devuelve el ultimo numero por la operacion que estas realizando dentro del ciclo:

    double d = Convert.ToDouble(items);
                        precioTotal = d;

    le estas asignando a d el double resultante (item) y a precio total este ultimo (d), pero por cada iteracion d es una variable diferente que obtiene el numero correspondiente y no la suma como usted pretende.. deberia hacer algo asi dentro del ciclo:

    precioTotal+=Convert.ToDouble(items);

    al final del ciclo vera que obtiene la suma de todos los items... le aclaro precioTotal+= es similar a decir: precioTotal=precioTotal+Convert.ToDouble(items);

    Espero le haya servido. Saludos

     

    domingo, 06 de marzo de 2011 18:34
  •  pero por que decimal y por que var, jejejeje sorry disculpa mi ignorancia pero eso me confundio,


    Primero: ¿Por qué Decimal? Porque habías dicho que querías sumar importes, y el tipo Decimal es el adecuado para contener importes. Normalmente no vale con un int, porque los importes suelen tener decimales. Y no se debe usar un double, porque puede tener problemas con los redondeos (hay valores que tienen representación exacta en base 10 y no la tienen en base 2, por lo que se pierden decimales al convertirlos a double).

    Segundo: ¿Por qué "var"? Por vaguería :-) Realmente, resulta más elegante usar el tipo correcto como variable de control del bucle for. Por ejemplo, si todos los Items son de tipo Decimal, es preferible usar Decimal en el for. Al no saber qué tipo de datos habías metido en los items del Listbox, declaré la variable como "var", que el compilador en este caso compila como "object", ya que éste es el tipo de los Items del Listbox.

     

     

    domingo, 06 de marzo de 2011 20:30
    Moderador

Todas las respuestas

  • No tienes más que iterar sobre los elementos del listbox con un bucle, convertirlos a numéricos (esto depende de cómo los hayas metido y de que sea un listbox de winforms o de webforms), y acumular el valor numérico en una variable. Te quedaría más o menos así:

    decimal suma = 0;
    foreach (var item in Listbox1.Items)
    {
      decimal d = Convert.ToDecimal(item); //OJO solo para Winforms y si se metieron los items con un formato compatible con Decimal
      suma += d;
    }
    Label1.Text = suma.ToString();
    
    domingo, 06 de marzo de 2011 11:37
    Moderador
  •  pero por que decimal y por que var, jejejeje sorry disculpa mi ignorancia pero eso me confundio,

    yo tengo asy, por ejemplo

    hay textbox donde capturo 20 precio

    y otro donde capturo una cantidad,

    y un subtotal

    entonces tengo 4 variables

    int cantidad;

    double precioUnitario, precio subtotal, precioTotal;

    precioSubtotal = precioUnitario * cantidad

    la variable precio subtotal se agrega al listbox

    listbox.items.add(subtotal)

    y se va creando una lista de todos los precios , el problema es que abajop tengo un label que debe guardar la suma de todo los precios subtotales, paa guardar el precio total para esto se guarda en la cuarta variable precioTotal

    me imagino que si es con un for o con un foreach, pero no se como, pero eso de var no lo entiendo por favor me podrian explicar un poco mejor
    domingo, 06 de marzo de 2011 17:20
  • hice esto sin entender lo var y lo de in pero jalo mas o menos no muy bien, hay les va lo que hice

    double precioTotal;

    foreach (var items in lstTotal.Items)
                    {
                        double d = Convert.ToDouble(items);
                        precioTotal = d;
                    }
                    lblTotal.Text = Convert.ToString(precioTotal);


    // y lo que hace es siempre me manda el ultimo numero capturado en el item, pero yo quiero la suma de todos no del ultimo, alguien digame que esta please

    y por que escribo var y me la pone de color azul y por que escribo in, eso es algo que nunca e usado

    una cosa mas este codigo se ejecuta cuando doy click en el boton btnAceptar.

    domingo, 06 de marzo de 2011 17:36
  • Te explico... el bloque de código foreach tiene esa estructura, escribes foreach y a continuación pulsas 2 veces seguidas la tecla Tab(tabulador) y se completa el código, solo debes sustituir items por un nombre que deseas usar en el ciclo, lo que hace es declarar esa variable, en este caso item de tipo var (el que debes sutituir (si gustas, porque después casteas) por el tipo de datos, en este caso supongo que sera Double), luego el ciclo se completa por cada elemento que hay en la lista... Espero que te quede mas claro amigo...

    ahora, es obvio que te devuelve el ultimo numero por la operacion que estas realizando dentro del ciclo:

    double d = Convert.ToDouble(items);
                        precioTotal = d;

    le estas asignando a d el double resultante (item) y a precio total este ultimo (d), pero por cada iteracion d es una variable diferente que obtiene el numero correspondiente y no la suma como usted pretende.. deberia hacer algo asi dentro del ciclo:

    precioTotal+=Convert.ToDouble(items);

    al final del ciclo vera que obtiene la suma de todos los items... le aclaro precioTotal+= es similar a decir: precioTotal=precioTotal+Convert.ToDouble(items);

    Espero le haya servido. Saludos

     

    domingo, 06 de marzo de 2011 18:34
  •  pero por que decimal y por que var, jejejeje sorry disculpa mi ignorancia pero eso me confundio,


    Primero: ¿Por qué Decimal? Porque habías dicho que querías sumar importes, y el tipo Decimal es el adecuado para contener importes. Normalmente no vale con un int, porque los importes suelen tener decimales. Y no se debe usar un double, porque puede tener problemas con los redondeos (hay valores que tienen representación exacta en base 10 y no la tienen en base 2, por lo que se pierden decimales al convertirlos a double).

    Segundo: ¿Por qué "var"? Por vaguería :-) Realmente, resulta más elegante usar el tipo correcto como variable de control del bucle for. Por ejemplo, si todos los Items son de tipo Decimal, es preferible usar Decimal en el for. Al no saber qué tipo de datos habías metido en los items del Listbox, declaré la variable como "var", que el compilador en este caso compila como "object", ya que éste es el tipo de los Items del Listbox.

     

     

    domingo, 06 de marzo de 2011 20:30
    Moderador
  • Como bien dice Alberto, si buscas una buena precisión te conviene usar Decimal en lugar de Double

    *** No sabia que var era por vagueria :-) creo que la voy a empezar a utilizar mas :D ****

    lunes, 07 de marzo de 2011 20:43
  • muchas gracias realmente aprendi cosas importantes ya quedo el problema
    miércoles, 16 de marzo de 2011 5:57
  • disculpa si es webforms como podria hacerlo x fas?
    sábado, 25 de agosto de 2012 0:47