2016-08-27 75 views
1

我該如何總結使用Ajax在數組中返回的總量?如何總結循環中的數組總數?

有沒有其他方法來計算金額爲.000的金額?

例子:

for (i = 0; i < data.RecordCount; i++) { 

totalBetAmount += parseFloat(data.Records[i].betAmount); 

結果: 0.22130000001

+0

歡迎來到浮點數的魔法世界......沒有什麼是精確的 –

+0

是否要刪除小數點? –

+2

[如何處理JavaScript中的浮點數精度?](http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript) –

回答

0

這不準確性是由於許多數字在浮點數中沒有確切的表示,這是什麼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);

+0

它的工作完美。謝謝@trincot –

0

圓剛小數的:

Math.round(); 
+0

不,這是不正確的!你能給我們一個例子,你的代碼如何工作這個問題? – M98

+0

如果你閱讀了原始問題的評論,你會明白他的意思=。= –

0

嘗試這樣的。

//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); 

希望這會有所幫助。

0

如果使用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

0

我不熟悉使用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));