2009-12-07 11 views
9

estoy usando jQuery, y quiero resumir los valores en mi columna de la tabla, todo parece funcionar bien, pero mi valor se devuelve una cadena con todos los valores añadidos como: 123.5013.0012.35Adición de flotadores con javascript

¿Cómo puedo sumar esto correctamente?

var totals 

$(".add").each(function(i) { 
    totals += parseFloat($(this).text()).toFixed(2); 
}); 

console.log(totals); 
+2

Dude. ¿Por qué estás usando 'toFixed' antes de tener el total? Eso lo convierte en una cadena y luego se anexan. Tu salida debería haberte informado sobre eso. En segundo lugar, suponiendo que * funcionó * como creías (se queda como un flotador), estarías recortando la precisión antes de obtener el total. – mpen

Respuesta

16

Tienes múltiples errores allí. Uno no está inicializando totales a algo numérico, como 0.0. El segundo no se da cuenta de que .toFixed() devuelve una cadena. Javascript concatena las cadenas, en lugar de agregar números.

Básicamente la misma pregunta se ha hecho antes, como javascript-why-does-this-produce-and-ugly-string-i-would-like-currency y respuestas que debería resolver esto por ti.

+0

es una moneda por lo que Necesito tener 2 decimales de precisión. –

+1

Si solo desea que el resultado final tenga esa precisión, deje de llamar a Fijo (2) hasta el final. Entonces todo hasta ese punto es agregar números, no cadenas. Si le preocupan los cálculos intermedios, tiene que pensar un par de cosas. Si se trata de una aplicación de "juguete", utilice parseFloat() en la salida del toFixed() para asegurarse de que es un número nuevo, a continuación, llamar toFixed() de nuevo al final. Si se trata de una aplicación "real", probablemente no deba usar valores de coma flotante para la moneda. –

+0

aguantando hasta el final hizo el truco. No debería tener que inicializar el valor, ¿correcto? –

5

Aquí está una versión de trabajo (probado en Firefox 3.5):

<!DOCTYPE html> 
<html> 
<head> 
    <title>Sum of nubers</title> 

    <script src="jquery.js" type="text/javascript"></script> 
    <script type="text/javascript"> 

     $(function(){ 
      var total = 0; 
      $(".add").each(function(){ 
       total += parseFloat($(this).text()); 
      }); 
      alert(total.toFixed(2)); 
     }); 
    </script> 
</head> 
<body> 
<div class="add">23.4567</div> 
<div class="add">98.7654</div> 
</body> 
</html> 

Eso es sólo una de las muchas maneras de hacerlo. Echar un vistazo a esta pregunta para varios otros métodos:

How to convert strings to floats

+0

todavía devuelve una cadena como '02.3402220.000' –

+0

Esto funcionó para mí, yo estaba almacenando el flotador en un objeto, de alguna manera se mantiene siendo tratada como una cadena, así que era explícita:' [-] + = total de parseFloat ($ (este) .text()); '[+]' = parseFloat (total) + parseFloat ($ (este) .text total de()); ' – roberthuttinger

2

parece que se está haciendo una cadena añadir. Intente establecer var totals = 0;

+0

sigo teniendo' 02.3402220.000' –

3
var totals 

$(".add").each(function(i) { 
    totals += parseFloat($(this).text()); 
}); 

console.log(totals.toFixed(2)); 

posiblemente utilice Math.round, suelo o ceil

2
function update_total() { 
    var total = 0.0; 
    $('.invoice_service_price').each(function(index){ 
     var val=parseFloat($(this).html().trim()); 
     if(!isNaN(val)) total += val; 
    }); 
    alert("total="+total); 
    }; 
3

simple probar esto. funciona para mi

var totals= 0; 
    $(".add").each(function() { 
     if (jQuery(this).val() != '') 
      totals= Number(totals) + Number(jQuery(this).val()); 
    }); 
    console.log(totals);