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
相关产品推荐
相关产品推荐

