2009-07-31 79 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); 

我想通过一些文本框来循环并总结它们的值。这产生了一个讨厌的字符串。我在想什么?如果我在第一个文本框中输入8,总文本最终为“08.000.000.000.00”。我究竟做错了什么?我想格式化为货币,但如果不是,至少只有两位十进制数。任何指针?Javascript:为什么这会产生丑陋的字符串?我想要货币

感谢,在圣地亚哥

+0

我倾向于做的事情总是做数学作为浮动或整数,保持来源,因为他们是为未来的任何操作。然后我有一个原型代码。货币(currencySign),纯粹用于显示结果给最终用户,但不在任何数学操作中 - 输出一个字符串。 – 2009-07-31 19:01:34

+0

String.prototype.toMoney = function(){ return“$”+ this; } var amount = total.toFixed(2).toMoney(); $(“。total”)。text(amount); 甜!完美的作品! – Hcabnettek 2009-07-31 19:09:29

回答

13

.toFixed 〜CK的对象从数转换为字符串。

保留完整值的地方,只能用.toFixed在最后

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

或者,将字符串转换回数字转换。

total = total + + tmp; 
1

仅供参考,有jQuery的一个很好的数学聚合插件:jQuery Calculation

使用该插件还可以间接地解决您的问题。

它的使用将你的脚本减少:

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

要转换的parseFloat成一个字符串,然后将它添加到总量。只添加.toFixed(2)到最后一行,一旦添加完成。

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);