缺失量的体积加权平均价格

时间:2015-12-09 10:59:37

标签: java math statistics weighted-average

我正在编写一个Java代码来计算我们必须购买的数量,以便加权平均值等于目标平均价格。

示例:让我们说一个产品p

  

Q1 = 310; //这个数量已经很多了。

     

P1 = 16.40; //我买了Q1数量@P1价格。

     

P2 = 15.00; //数量的当前市场价格。

     

P3 = 15.10; //目标平均价格。我必须把我的平均价格带到他的   价。

     

Q2 =? //以价格购买多少产品p   P2。所以我的平均价格等于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;
}

帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分: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!");
}