我试图获得几个数字的加权平均数。基本上我有:大数的计算加权平均数
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