基于供应量变动百分比调整原油价格的代码优化求助
问题分析与修复方案
你的代码目前存在几个关键问题,导致只能生效一次且逻辑不符合需求:
- 价格调整逻辑完全错误:
CrudeOilPriceRussia *= -0.0006f;这行代码会直接把价格变成原价格的-0.06%(几乎归零甚至负数),而不是在原价格基础上下调0.06%。正确的百分比下调应该是乘以(1 - 0.0006),上调则是乘以(1 + 0.001)。 - 未覆盖供应量下浮的场景:代码只判断了供应量增加的分支,完全没处理供应量减少时价格上调的逻辑。
- 供应量变化的基准搞错了:需求里的0.125%是相对于基准库存4000万的比例,而不是当前库存的0.125%。你需要基于基准值计算变化幅度,才能准确对应价格调整。
- 单次判断无法实现累计调整:当前代码只做了一次if判断,没有根据供应量的总变化量来累计计算价格调整。
修正方案一:基于基准库存的总变化调整价格
这个版本会根据当前库存相对于基准4000万的总变化幅度,一次性计算出对应的价格,适合需要锚定基准价的场景:
public void AddDailyCrudeOil() { // 把基准值定义为常量,后续修改参数更方便 const float BaseSupply = 40000000f; const float BasePrice = 20f; // 更新当前库存 CrudeOilSupplyRussia += DailyCrudeOilAmountRussia; // 计算当前库存相对于基准的变化百分比 float supplyChangePercent = ((CrudeOilSupplyRussia - BaseSupply) / BaseSupply) * 100f; // 计算需要调整的次数:每0.125%的变化对应一次价格调整 float adjustmentTimes = supplyChangePercent / 0.125f; if (adjustmentTimes > 0) { // 供应量上浮:每0.125%对应价格下调0.06%,用幂运算实现累计调整 CrudeOilPriceRussia = BasePrice * Mathf.Pow(1 - 0.0006f, adjustmentTimes); } else if (adjustmentTimes < 0) { // 供应量下浮:每0.125%对应价格上调0.1%,取绝对值计算调整次数 float positiveAdjustmentTimes = -adjustmentTimes; CrudeOilPriceRussia = BasePrice * Mathf.Pow(1 + 0.001f, positiveAdjustmentTimes); } else { // 库存等于基准时,价格回到基准价 CrudeOilPriceRussia = BasePrice; } }
修正方案二:基于每日供应量变化的增量调整
如果你的需求是每天根据当日的供应量变化单独调整价格(而不是相对于基准的总变化),可以用这个版本,适合每日逐步调整的场景:
public void AddDailyCrudeOil() { const float BaseSupply = 40000000f; // 基准0.125%对应的供应量变化量:4000万 * 0.125% = 50000 const float SupplyChangePerStep = BaseSupply * 0.00125f; // 更新当前库存 CrudeOilSupplyRussia += DailyCrudeOilAmountRussia; // 计算当日供应量变化对应的调整次数 float dailyAdjustmentTimes = DailyCrudeOilAmountRussia / SupplyChangePerStep; if (dailyAdjustmentTimes > 0) { // 当日供应量增加:每步下调0.06%,累计调整 CrudeOilPriceRussia *= Mathf.Pow(1 - 0.0006f, dailyAdjustmentTimes); } else if (dailyAdjustmentTimes < 0) { // 当日供应量减少:每步上调0.1%,取绝对值计算调整次数 float positiveTimes = -dailyAdjustmentTimes; CrudeOilPriceRussia *= Mathf.Pow(1 + 0.001f, positiveTimes); } }
两个方案都用Mathf.Pow实现了多次百分比调整的累计效果,比如供应量上浮0.25%(两个0.125%步长),价格就会是基准价乘以(1-0.0006)的2次方,完美实现你需要的增量调整逻辑。
内容的提问来源于stack exchange,提问作者user8086054
相关产品推荐
相关产品推荐

