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

Java计算拍卖剩余时间百分比代码始终返回99如何解决?

问题原因
  • 核心计算逻辑错误
    你当前的calculatePercentage方法计算的是当前Unix时间戳占目标结束时间戳的比例,Unix时间戳是从1970年1月1日至今的累计毫秒值,本身数值量级非常大,你设置的7.5秒差值和时间戳本身相比可以忽略不计,因此current * 100 / max的结果永远接近100,固定输出99,和你需要的「剩余时间占总拍卖时长比例」的需求完全不符。
  • 死循环无休眠控制
    没有添加休眠逻辑的死循环会持续占满CPU核心,同时输出频率过高,既没有实际展示价值也会影响运行效率。
修正方案

剩余时间比例的计算公式应为:剩余时间 ÷ 总拍卖时长 × 100,需要额外记录拍卖启动时的时间戳计算总时长,同时添加边界判断避免到期后输出负数,循环中添加休眠控制更新频率。
修正后代码如下:

// 记录拍卖启动时间
long startTime = System.currentTimeMillis();
// 拍卖结束时间:启动后7.5秒
long endTime = startTime + 7500;
// 拍卖总时长
long totalDuration = endTime - startTime;

while (true) {
    long currentTime = System.currentTimeMillis();
    System.out.println(calculateRemainPercentage(currentTime, endTime, totalDuration));
    // 每100毫秒更新一次,可根据展示流畅度需求调整间隔
    Thread.sleep(100);
}
public static long calculateRemainPercentage(final long currentTime, final long endTime, final long totalDuration) {
    long remainTime = endTime - currentTime;
    // 到期后直接返回0,避免输出负数
    if (remainTime <= 0) {
        return 0;
    }
    return remainTime * 100 / totalDuration;
}

注:实际生产环境使用时需要捕获Thread.sleep抛出的InterruptedException做对应异常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 22:09:01