2010-11-24 61 views
0

我有一些表单输入元素commission_plan和不同的ID。我需要总结这个元素的值。我使用此代码:javascript jquery .each()问题

jQuery(document).ready(function() { 
    var total = 0; 
    $('.commission_plan').each(function() { 
     total = total + parseFloat($(this).val()); 
    }); 
    $('#payment_total_amount_hidden').val(total); 
    $('#payment_total_amount').text('Total: ' + total); 
}): 

在我的输入字段中的值是3.45和4.65。但为什么#payment_total_amount包含8.100000000000001?非常奇怪的行为。

+0

尝试做映射。并得到方法。 – 2010-11-24 10:48:43

+1

@steven - `.map()`返回一个数组,因为我们在循环结尾的单个值之后,所以这真的不合适。 – 2010-11-24 10:52:03

回答

4

这是多么的浮点运算的行为,因为你经常要保留2位小数货币的情况下,所以渲染时,像这样使用.toFixed(2)

var total = 0; 
    $('.commission_plan').each(function(){ 
     total = total + parseFloat($(this).val()); 
    }); 
    $('#payment_total_amount_hidden').val(total.toFixed(2)); 
    $('#payment_total_amount').text('Total: '+total.toFixed(2)); 
}): 
2

这是浮点值的精度问题的结果。您可以尝试使用toFixed(n)javascript方法来限制小数位数。

编辑:由Nick在注释中说明toFixed(n)方法会将float转换为字符串,因此只能在计算完成后才使用。