2014-03-30 30 views
1

我有24個價格,一天中的每個小時一個價格,我需要找到它們的平均值(日均值)。Javascript - 找到平均價格(即小數圓)的準確方法是什麼?

但是,我無法獲得正確的平均價格,而且我無法找到關於如何在Javascript中平均價格/小數位數的精確算法。每種方法(parseFloat,toFixed())似乎偶爾會產生不準確的結果。

有誰知道準確的方式來平均價格/小數的Javascript在Javascript中?我不只是在談論一些只適用於價格陣列的東西,而是一些有效的東西,並且可以防止任何價格(小數)...

這是我對的東西現在。它在Chrome中返回178.00。但它應該返回178.01。

// Rounding Function 
function roundDecimal(value) { 
    return Number(Math.round(value+'e2')+'e-2'); 
}; 

var priceSum = 0; 
var prices  = [23.4,24.4,24.68,25,25.1,30.81,851.19,646.47,659.24,707.7,759.23,124.69,37.93,53.25,23.4,23.8,23.4,23.4,50.57,37.78,25,24.55,23.4,23.73] 

for(var x = 0; x < prices.length; x ++) { 
    priceSum = priceSum + prices[x]; 
    console.log(priceSum); 
}; 

var priceAverage = roundDecimal(priceSum/prices.length); 

console.log("Daily Average is: "+priceAverage); 

回答

3

請參考這個問題https://stackoverflow.com/a/588014/536984

JavaScript的浮點運算,並不意味着做財務計算,也比較好,你代表你的價格在美分,這樣你不必小數

var array = [2340, 2440, 2468, 2500, 2510, 3081, 85119, 64647, 65924, 70770, 75923, 12469, 3793, 5325, 2340, 2380, 2340, 2340, 5057, 3778, 2500, 2455, 2340, 2373]; 

Math.round(array.reduce(function (a, b) { return a + b })/array.length) 
+1

太棒了。使用整數是我正在尋找的防彈答案。謝謝! – ac360

0

正如別處說過,錢是最容易的整數,但要獲得精確到半分,由100分獲得由美的數量後再次美分除以總冰。

var prices= [23.4, 24.4, 24.68, 25, 25.1, 30.81, 851.19, 646.47, 659.24, 707.7, 759.23, 124.69, 37.93, 53.25, 23.4, 23.8, 23.4, 23.4, 50.57, 37.78, 25, 24.55, 23.4, 23.73]; 

var total=prices.map(function(n){ 
    return n*100; 
}).reduce(function(a, b){ 
    return a+(b || 0); 
}); 

Math.round((total/prices.length))/100; 

/* returned value: (Number) 
178.01 
*/ 
相關問題