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

calculateCost方法中costOfTruck未随minimumTemperature更新问题

问题分析与修复:calculateCost()成本不随温度变化的原因

嘿,我一眼就看穿问题所在了——这是Java里整数除法的截断特性在作祟!咱们来仔细捋一捋:

先看你代码里的核心计算行:

double costOfTruck = 900 + 200 * (Math.pow(0.7, (minimumTemperature / 5)));

你的minimumTemperature是int类型,当你执行minimumTemperature / 5时,Java会触发整数除法:不管小数部分是多少,都会直接截断,只保留整数结果。举几个例子你就懂了:

  • 温度=5 → 5/5=1
  • 温度=7 → 7/5还是1(0.4的小数部分直接丢了)
  • 温度=9 → 9/5依然是1
  • 只有温度到10的时候,10/5=2,指数部分才会变

这就导致只要温度在同一个5的区间里(比如0-4、5-9、10-14),计算出来的指数值完全一致,最终成本自然不会随温度变化,哪怕控制台显示温度已经改了也没用。

两种简单的修复方案

你只需要让除法变成浮点除法就行,有两种常见的实现方式:

方案一:把除数改成浮点数

直接把5改成5.0,这样Java就会自动把被除数也转为浮点数进行计算:

public double calculateCost() { 
    int minimumTemperature = this.getTemperature(); 
    System.out.println("Temp is: " + minimumTemperature); 
    // 把5改成5.0,触发浮点除法
    double costOfTruck = 900 + 200 * (Math.pow(0.7, (minimumTemperature / 5.0))); 
    System.out.println("Cost is: " + costOfTruck); 
    return costOfTruck; 
}

方案二:强制转换温度为浮点数

先把minimumTemperature转成double类型,后续计算就不会有整数截断的问题:

public double calculateCost() { 
    int minimumTemperature = this.getTemperature(); 
    System.out.println("Temp is: " + minimumTemperature); 
    // 先转成double再计算
    double tempDouble = minimumTemperature;
    double costOfTruck = 900 + 200 * (Math.pow(0.7, (tempDouble / 5))); 
    System.out.println("Cost is: " + costOfTruck); 
    return costOfTruck; 
}

修复之后再测试,比如温度是7的话,7/5.0=1.4,Math.pow(0.7,1.4)和Math.pow(0.7,1)的结果完全不同,成本就能跟着温度正确变化啦!

内容的提问来源于stack exchange,提问作者MrShippopi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:06:02