You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于供应量变动百分比调整原油价格的代码优化求助

问题分析与修复方案

你的代码目前存在几个关键问题,导致只能生效一次且逻辑不符合需求:

  • 价格调整逻辑完全错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:51