2015-12-09 62 views
2

我正在編寫Java代碼來計算我們必須購買的數量的數量,以便加權平均數等於目標平均價格。缺失quatinty的容量加權平均價格

實施例:比方說一個乘積p

Q1 = 310; //我已經有了這麼多的數量。

P1 = 16.40; //我在P1價格購買了Q1數量。

P2 = 15.00; //數量的當前市場價格。

P3 = 15.10; //目標平均價格。我必須將我的平均價格提高到他的價格 。

Q2 =? //以價格 P2購買多少產品p。這樣我的平均價格就等於P3。

我無法弄清這個直接公式

到目前爲止,我已經試過這樣:

void int getQuantity(Q1,P1,P2,P3) 
{ 
    int i = 0; 
    while(true) 
    { 
     double calcPrice = ((Q1*P1)+(i*P2))/(Q1+i); 

     // If Calculated price equals to Target Price, break out of loop 
     if(calcPrice == P3) { 
      break; 
     } 
     // if values not same Increment i by 1. 
     ++i; 
    } 
    return i; 
} 

幫助將不勝感激。

謝謝

回答

2

這背後的數學很簡單。其計算公式爲:

Q1 * P1 + Q2 * P2 
---------------- = P3 
    Q1 + Q2 

如果通過Q2解決這個問題你必須:

 Q1 * (P1 - P3) 
Q2 = --------------- 
     (P3 - P2) 

在代碼中,這將是:

double Q2 = Q1 * (P1-P3)/(P3-P2); 

完整的方法有涵蓋諸如P2 == P3P2 > P3之類的東西。您可以像這樣處理這些情況(例如):

public double getQuantity(int Q1, double P1, double P2, double P3) throws IllegalArgumentException { 
    if ((P1 > P3 && P3 > P2) || (P1 < P3 && P3 < P2)) 
     return Q1*(P1-P3)/(P3-P2); 
    else if (P1 == P3) 
     return 0; 
    else 
     throw new IllegalArgumentException("P3 has to be between P1 and P2!"); 
} 
+0

感謝您的快速回復。但是,如果現價和目標價格相等,這個公式將不起作用。那是P2 == P3。 –

+2

其原因是當時無法達到平均價格。你必須購買無限量才能達到它;)但我會相應地編輯我的帖子來幫助你解決這個問題 – ParkerHalo

+0

@Teepeemm你是對的!我會根據你的帖子調整我的例子! – ParkerHalo