javascript解析浮动错误

时间:2011-09-16 08:00:09

标签: javascript jquery

我正在尝试获取表格的总和:

  

td1 val = $ 5,000.00; td2 val = $ 3000.00;

我正在使用以下代码:

var totalnum = 0;
$('.num').each(function(){
  totalnum+= parseFloat($(this).html());
});
$('.total_num').html(totalnum);

如果我从数字中移除货币格式,则此代码非常有效,否则即使我使用NaN,也会提供parseFloat

我错过了什么?

3 个答案:

答案 0 :(得分:4)

尝试:

var totalnum = 0;
$('.num').each(function(){
   totalnum+= parseFloat($(this).html().substring(1).replace(',',''));
});
$('.total_num').html('$' + totalnum);

这将从开头和所有逗号中删除$(或任何货币符号),然后再执行parseFloat并将其放回总数中。

或者您可以使用jQuery FormatCurrency插件执行此操作:

totalnum+= $(this).asNumber();

答案 1 :(得分:3)

如果您将$添加到该值,则它不再是整数,并且无法再使用它来计算。

尝试将格式化的值重新设置为数字是一个坏主意。您必须提供不同的货币符号,不同的格式(例如1.000,00)等等。

最好的方法是将原始数值存储在单独的属性中。如果使用HTML 5,您可以使用jQuery的data()

<td class="num" data-value="1.25">$1.25</td>
....

var totalnum = 0;
$('.num').each(function(){
  totalnum+= parseFloat($(this).data("value"));
});
$('.total_num').html(totalnum);

这样,您将格式化结果与数值分开,这样可以省去很多麻烦。

答案 2 :(得分:1)

尝试删除$以及不属于float类型的任何其他字符:

var totalnum = 0;

$('.num').each(function(){
    var num = ($(this).html()).replace(/[^0-9\.]+/g, "");
    totalnum+= parseFloat(num);
});

$('.total_num').html(totalnum);

修改:更新replace以根据this answer删除所有非数字字符(句点除外)。