我該如何總結使用Ajax在數組中返回的總量?如何總結循環中的數組總數?
有沒有其他方法來計算金額爲.000的金額?
例子:
for (i = 0; i < data.RecordCount; i++) {
totalBetAmount += parseFloat(data.Records[i].betAmount);
結果: 0.22130000001
我該如何總結使用Ajax在數組中返回的總量?如何總結循環中的數組總數?
有沒有其他方法來計算金額爲.000的金額?
例子:
for (i = 0; i < data.RecordCount; i++) {
totalBetAmount += parseFloat(data.Records[i].betAmount);
結果: 0.22130000001
這不準確性是由於許多數字在浮點數中沒有確切的表示,這是什麼JavaScript用來存儲數字。
務實的解決方案是小數點後的結果四捨五入到一定數量的小數,就像這樣:
totalBetAmount = Math.round(totalBetAmount*100000000)/100000000;
這裏是一個片段,顯示了原來的號碼和圓潤號:
// Sample data
var data = {
Records: [
{ betAmount: 0.0001 },
{ betAmount: 0.0001 },
{ betAmount: 0.0001 },
],
RecordCount: 3
};
var totalBetAmount = 0;
for (i = 0; i < data.RecordCount; i++) {
totalBetAmount += parseFloat(data.Records[i].betAmount);
}
console.log('before:', totalBetAmount);
// round of inaccuracies, assuming decimals
totalBetAmount = Math.round(totalBetAmount*100000000)/100000000;
console.log('after:', totalBetAmount);
它的工作完美。謝謝@trincot –
嘗試這樣的。
//this will be total sum of all numbers
var totalSum = (data.Records || []).reduce(function(total, num){
return parseFloat(total) + parseFloat(num);
});
//now you can do what you want using ParseInt or toFixed...
//convert to INT
totalSum = parseInt(totalSum);
//leave just 2 numbers after decimal like 1.12
totalSum = totalSum.toFixed(2);
希望這會有所幫助。
如果使用ES6(ECMAScript 2015),你可以使用reduce
功能(大video tutorial學習減少)
下面是一個簡單的例子:
var yourArray = [50, 60, 70, 100, 20]
var sum = yourArray.reduce((a, b) => a + b, 0);
console.log(sum); //Returns: 300
我不熟悉使用Ajax,但,這可能是helpul:
var arr = [5.33655,6.6655,9.554];
var sum = 0;
for (var i = 0 ; i < arr.length ; i++) {
sum += arr[i]
};
console.log(sum.toFixed(3));
歡迎來到浮點數的魔法世界......沒有什麼是精確的 –
是否要刪除小數點? –
[如何處理JavaScript中的浮點數精度?](http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript) –