2010-11-24 62 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轉換爲字符串,因此只能在計算完成後才使用。