2009-07-31 14 views
6
var total = 0; 
     $(".amount").each(function() { 
      var value = $(this).val(); 
      value = (value.length < 1) ? 0 : value; 
      var tmp = parseFloat(value).toFixed(2); 
      total += tmp; 
     }); 
     $(".total").text(total); 

Estoy tratando de recorrer algunos cuadros de texto y resumir sus valores. Esto produce una cadena desagradable. ¿¿Qué me estoy perdiendo?? si pongo 8 en el primer cuadro de texto, el texto total termina en "08.000.000.000.00". ¿Qué estoy haciendo mal? Me gustaría formatear como moneda, pero si no, al menos solo dos números decimales. ¿Alguna sugerencia?Javascript: ¿por qué esto produce y cadena fea ??? Me gustaría la moneda

Gracias, ~ ck en San Diego

+0

lo que suelo hacer siempre es hacer matemáticas como flotadores o ints, manteniendo las fuentes como están para cualquier operación futura. Luego tengo un prototipo codificado .money (currencySign) que se usa exclusivamente para mostrar los resultados al usuario final pero no en ninguna operación matemática: muestra una cadena. –

+0

String.prototype.toMoney = function() { return "$" + this; } var amount = total.toFixed (2) .toMoney(); $ (". Total"). Texto (cantidad); ¡¡¡Dulce !!! Funciona perfecto! – Hcabnettek

Respuesta

13

.toFixed convierte el objeto a partir de un número en una cadena.

dejar los valores completos en su lugar y sólo convierten utilizando .toFixed al final

$(".total").text(total.toFixed(2)); 

Alternativamente, convertir la cadena de nuevo a un número.

total = total + + tmp; 
+0

++ me salvó, estaba aplicando '.toFixed (2)' para flotar, pero eso lo convirtió en una cadena y al agregar con un '+' obtuve 5 + 5 = 55 en vez de 5 + 5 = 10. :) Gracias. – rmagnum2002

1

Para su información, hay un excelente plug-in de agregación matemática para jQuery: jQuery Calculation

Usando ese plugin también puede resolver su problema de forma indirecta.

el uso de Reduciría su script:

$('.total').text($('.amount').sum()); 
0

que está convirtiendo el parseFloat en una cadena, a continuación, agregarlo al total. Solo agregue .toFixed (2) a la línea final, una vez que se hayan agregado las cosas.

var total = 0; 
$(".amount").each(function() { 
    var value = $(this).val(); 
    value = (value.length < 1) ? 0 : value; 
    var tmp = parseFloat(value); 
    total += tmp; 
}); 
$(".total").text(total).toFixed(2); 
Cuestiones relacionadas