Tôi đang cố gắng để có được mức trung bình có trọng số của một vài số. Về cơ bản tôi có:Tính trung bình có trọng số cho số lớn
Price - 134.42
Quantity - 15236545
Có thể có ít nhất một hoặc hai hoặc nhiều năm mươi sáu mươi cặp giá và số lượng. Tôi cần phải tìm ra mức trung bình của giá. Về cơ bản, mức trung bình có trọng số nên cung cấp trọng lượng rất nhỏ cho các cặp như
Price - 100000000.00
Quantity - 3
và nhiều hơn nữa cho cặp ở trên.
Công thức Tôi hiện đang có là:
((price)(quantity) + (price)(quantity) + ...)/totalQuantity
Cho đến nay tôi có điều này thực hiện:
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;
Vấn đề là tôi rất nhanh chóng tối đa ra "lăn" biến.
Làm cách nào để có được mức trung bình có trọng số của mình?
'1.055' ->' 105', bạn nên thêm '0,005' vào giá trị trước khi nhân với' 100' hoặc '0,5' sau khi nhân với' 100' nhưng trước chuyển đổi số nguyên, chẳng hạn như: '1,055 '->' 106', là số làm tròn chính xác. – Pindatjuh
@Pindatjuh: ý tưởng không mất đi bất kỳ độ chính xác nào cả. Tôi đề nghị nhân với 100 vì có vẻ như giá của OP có hai chữ số chính xác sau thời điểm đó, không nhiều hơn. – Oak
tất nhiên, nhưng nó không phải là lời chỉ trích cho đề xuất tuyệt vời của bạn (+1), chỉ là một lưu ý để làm tròn tốt hơn khi sử dụng "hack" nhân với 100 và chuyển thành số nguyên, trong trường hợp có nhiều hơn 2 chữ số. – Pindatjuh