缺失数量的体积加权平均价格
Volume-weighted average price for a missing quatinty
我正在编写 Java 代码来计算我们必须购买的数量,以便加权平均值等于目标平均价格。
示例:假设一个产品 p
Q1 = 310; // This much quantity I already have.
P1 = 16.40; // I bought Q1 quantity @ P1 price.
P2 = 15.00; // Current Market Price for Quantity.
P3 = 15.10; // Target Avg Price. I have to bring my Avg price to his
price.
Q2 = ? // How many of product p to be bought at price
P2. So that my avg price is equal to 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;
}
我们将不胜感激。
谢谢
背后的数学原理非常简单。公式为:
Q1 * P1 + Q2 * P2
---------------- = P3
Q1 + Q2
如果你在第二季度解决这个问题,你将拥有:
Q1 * (P1 - P3)
Q2 = ---------------
(P3 - P2)
在代码中这将是:
double Q2 = Q1 * (P1-P3) / (P3-P2);
完整的方法必须涵盖 P2 == P3
或 P2 > 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!");
}
我正在编写 Java 代码来计算我们必须购买的数量,以便加权平均值等于目标平均价格。
示例:假设一个产品 p
Q1 = 310; // This much quantity I already have.
P1 = 16.40; // I bought Q1 quantity @ P1 price.
P2 = 15.00; // Current Market Price for Quantity.
P3 = 15.10; // Target Avg Price. I have to bring my Avg price to his price.
Q2 = ? // How many of product p to be bought at price P2. So that my avg price is equal to 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;
}
我们将不胜感激。
谢谢
背后的数学原理非常简单。公式为:
Q1 * P1 + Q2 * P2
---------------- = P3
Q1 + Q2
如果你在第二季度解决这个问题,你将拥有:
Q1 * (P1 - P3)
Q2 = ---------------
(P3 - P2)
在代码中这将是:
double Q2 = Q1 * (P1-P3) / (P3-P2);
完整的方法必须涵盖 P2 == P3
或 P2 > 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!");
}