我正在尝试获取表格的总和:
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
。
我错过了什么?
答案 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删除所有非数字字符(句点除外)。