javascript解析浮动错误
我试图得到我的表的行总和:
td1 val = $ 5,000.00; td2 val = $ 3000.00;
我使用以下代码:
var totalnum = 0; $('.num').each(function(){ totalnum+= parseFloat($(this).html()); }); $('.total_num').html(totalnum);
如果我从数字中删除货币格式,此代码非常有效,否则即使我使用parseFloat
也会给出NaN
。
我错过了什么?
尝试:
var totalnum = 0; $('.num').each(function(){ totalnum+= parseFloat($(this).html().substring(1).replace(',','')); }); $('.total_num').html('$' + totalnum);
这将从开头和所有逗号中删除$(或任何货币符号),然后再执行parseFloat并将其放回总数中。
或者你可以使用jQuery FormatCurrency插件并执行以下操作:
totalnum+= $(this).asNumber();
如果将$
添加到该值,则它不再是整数,并且无法再使用。
试图将格式化的值恢复为数字是一个坏主意。 您必须满足不同的货币符号,不同的格式(例如1.000,00
)等。
最好的方法是将原始数值存储在单独的属性中。 如果使用HTML 5,您可以使用jQuery的data()
:
$1.25 .... var totalnum = 0; $('.num').each(function(){ totalnum+= parseFloat($(this).data("value")); }); $('.total_num').html(totalnum);
这样,您将格式化结果与数值分开,这样可以省去很多麻烦。
尝试删除$
和不属于float类型的任何其他字符:
var totalnum = 0; $('.num').each(function(){ var num = ($(this).html()).replace(/[^0-9\.]+/g, ""); totalnum+= parseFloat(num); }); $('.total_num').html(totalnum);
编辑:更新replace
以根据此答案删除所有非数字字符(句点除外)。