我試圖獲得幾個數字的加權平均數。基本上我有:大數的計算加權平均數
Price - 134.42
Quantity - 15236545
可以有少至一個或兩個或多達五60對價格和數量。我需要弄清楚價格的加權平均值。基本上,加權平均值應該給予非常小的權重,如
Price - 100000000.00
Quantity - 3
和更多的對上面。
我現在有計算公式爲:
((price)(quantity) + (price)(quantity) + ...)/totalQuantity
到目前爲止,我有這個工作:
double optimalPrice = 0;
int totalQuantity = 0;
double rolling = 0;
System.out.println(rolling);
Iterator it = orders.entrySet().iterator();
while(it.hasNext()) {
System.out.println("inside");
Map.Entry order = (Map.Entry)it.next();
double price = (Double)order.getKey();
int quantity = (Integer)order.getValue();
System.out.println(price + " " + quantity);
rolling += price * quantity;
totalQuantity += quantity;
System.out.println(rolling);
}
System.out.println(rolling);
return rolling/totalQuantity;
問題是,我很快就最大程度的發揮「滾動」變量。
我怎樣才能真正得到我的加權平均值?
'1.055' - >'105',您應該在乘以100之前,但在整數轉換之前加上'0.005',然後再乘以100, ' - >'106',這是正確的四捨五入。 – Pindatjuh 2010-05-30 11:45:11
@Pindatjuh:這個想法不會失去任何精度。我建議乘以100,因爲它看起來像OP的價格恰好在該點後兩位數,而不是更多。 – Oak 2010-05-30 12:03:30
當然,但這不是批評你的出色建議(+1),只是在使用乘以100並轉換爲整數的「黑客」時更好的四捨五入的註釋,如果超過2數字。 – Pindatjuh 2010-05-30 14:00:13