PHP中如何计算当前经验在等级区间内的进度百分比?
PHP实现等级区间内经验进度百分比计算
正确计算逻辑
你之前的代码错误在于直接用当前经验除以区间最大值,没有把区间最小值作为进度的起点(0%)。正确的计算应该是:先算出当前经验超出区间最小值的部分,再除以整个区间的总长度,最后乘以100得到百分比。公式如下:$currentProg = (($current_exp - $current_min) / ($current_max - $current_min)) * 100;
完整PHP代码(含异常处理)
// 示例参数 $current_exp = 26000; $current_min = 25100; $current_max = 34230; // 计算区间总长度,避免除以0的错误 $level_range = $current_max - $current_min; if ($level_range <= 0) { // 处理无效区间(比如配置错误导致最大值<=最小值) $currentProg = 0; // 或根据业务需求设为100% } else { // 计算进度百分比 $currentProg = (($current_exp - $current_min) / $level_range) * 100; // 可选:保留2位小数,优化显示 $currentProg = round($currentProg, 2); } // 输出结果,示例中为9.77% echo $currentProg;
逻辑说明
- 当
$current_exp等于$current_min时,结果为0%,完美匹配刚升级时的进度显示 - 当
$current_exp等于$current_max时,结果为100%,对应等级满经验状态 - 加入区间长度判断,避免因配置错误出现除以0的致命错误
- 用
round()函数可以控制小数位数,让进度显示更美观
测试验证
用你提供的案例测试:
- 下一等级区间25100-34230,经验26000:
((26000-25100)/(34230-25100))*100 = 900/9130*100 ≈9.77%,符合实际预期的低进度 - 当前等级区间18750-25100,经验22000:
((22000-18750)/(25100-18750))*100=3250/6350*100≈51.18%,正确反映区间内的进度
内容的提问来源于stack exchange,提问作者jake oliver
相关产品推荐
相关产品推荐

