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

使用Math方法保留两位小数出错:充电时间计算值异常求助

充电时间计算四舍五入错误问题排查与解决

我正在完成一项作业,需要生成包含各类数值的表格,但遇到了问题:充电时间(Laddningstid(h))被四舍五入为16.0,而正确结果应为15.57(因35.8/2.3=15.57)。请问我哪里出错了?如何得到正确的计算值?

代码如下:

class Main {
  public static void main(String[] args) {

    double batteryEffect = 35.8;
    int current = 10;
    int current1 = 16;
    int current2 = 32;

    int voltage = 230;
    int voltage1 = 400;

    
    double calcEffect = 0;

    int noOfDecimals = 2;
    double scale = 0;
    scale = Math.pow(10, noOfDecimals);
    calcEffect = Math.round(current*voltage)*scale/scale/1000;

    
    double calcCharge = 0;

    calcCharge = Math.round(batteryEffect/calcEffect)*scale/scale;
    

    System.out.print("Batteri" + " " + batteryEffect + "(kWh)");
    System.out.print("\n");
    System.out.print("\nStröm(A)\tSpänning(V)\tLaddeffekt(kW)\tLaddningstid(h)");  
    System.out.print("\n=======================================================");
    System.out.print("\n");
    System.out.print(current + "\t\t\t" + voltage + "\t\t\t"  + calcEffect + "\t\t\t\t" + calcCharge);
    System.out.print("\n");
    System.out.print(current1 + "\t\t\t" + voltage);
  }
}

错误原因

问题出在calcCharge的计算逻辑上:

  • 你先执行了Math.round(batteryEffect/calcEffect),35.8/2.3的结果是15.5652...,Math.round会把这个值四舍五入到最近的整数16。
  • 之后再乘以scale(100)再除以scale,结果还是16.0,完全丢失了小数部分的精度。

修正方案

要保留两位小数的正确结果,需要先将除法结果放大100倍,再做四舍五入,最后缩小回原比例:

calcCharge = Math.round((batteryEffect / calcEffect) * scale) / scale;

这样计算时,15.5652... * 100 = 1556.52...,Math.round后得到1557,再除以100就得到15.57,符合预期。

另外,calcEffect的写法可以简化得更严谨,避免冗余计算:

calcEffect = Math.round(current * voltage / 1000.0 * scale) / scale;

修正后运行代码,充电时间就会显示正确的15.57。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:55:18