我有一个js文件,用于计算用户点击时的所有总数,这将总结所有点击的行,但如果数字包含小数,则无法正确添加,而是始终将00放在小数上
function calculateRevenue(){
var sum = 0;
$("input#check_count_revenue[type=checkbox]:checked").each(function() {
sum += parseInt($(this).attr("data-revenuecount"));
});
$("#revenue_count_totals").html(sum.toFixed(2)).digits();
};
然后调用这个函数
table.on("change","input#check_count_revenue", function() {
$(this).closest("td").addClass("checked_revenue");
calculateRevenue();
if ($(this).prop("checked") === false)
$(this).closest("td").removeClass("checked_revenue");
});
如果该行包含以下内容
12.00
13.00
这将正确地总计25.00
但是
12.00
13.01
仍然有25.00而不是25.01
有什么想法吗?我已经尝试用parseFloat代替parseInt,不解析
答案 0 :(得分:-1)
这不仅是JavaScript的常见问题,也是处理浮点运算的几种编程语言。
从StackOverflow查看此answer,此explanation查看它们在JS中的工作方式,以及此CS docs以获取有关它的更多信息。
我认为重要你在给出任何“解决方案”之前就已经理解了这个问题,但如果你真的需要一个认真可靠的工具来处理浮点值,我建议你使用{{3 }}
答案 1 :(得分:-1)
你可以使用toFixed()方法
var num = 5.56789;
var n = num.toFixed(2);
答案 2 :(得分:-2)
看看这是否适合您:
function sumFix(){
var a = [].slice.call(arguments), d = a.pop(), s = 0, p = Math.pow(10, d);
for(var i=0,l=a.length; i<l; i++){
s += a[i]*p;
}
return (s/p).toFixed(d);
}
然后你可以这样做:
function calculateRevenue(){
var nums = [];
$('input#check_count_revenue[type=checkbox]:checked').each(function(){
nums.push(parseFloat($(this).attr("data-revenuecount")));
});
$('#revenue_count_totals').html(sumFix.apply(null, nums.concat(2));
};
sumFix
接受任意数量的参数,最后一个是您需要的小数位。
正常使用而不使用.apply()
:
console.log(sumFix(12.00, 13.01, 2));