请求解释PHP代码中项目进度百分比的计算逻辑
项目进度百分比计算代码详解
先梳理这段代码的整体逻辑:它从数据库获取当前项目的总任务数和已完成任务数,计算项目完成进度百分比,再把数字格式化为更友好的显示形式。
前置关键变量(进度计算的基础数据)
先看这两行获取数据的代码:
// 获取当前项目的总任务数量 $tprog = $conn->query("SELECT * FROM task_list where project_id = {$row['id']}")->num_rows; // 获取当前项目中状态为3(标记为已完成)的任务数量 $cprog = $conn->query("SELECT * FROM task_list where project_id = {$row['id']} and status = 3")->num_rows;
第一行:计算进度百分比
$prog = $tprog > 0 ? ($cprog/$tprog) * 100 : 0;
这是PHP的三元运算符,等价于下面的if-else写法:
if ($tprog > 0) { // 总任务数大于0时,用「已完成数÷总数」×100,得到百分比数值 $prog = ($cprog / $tprog) * 100; } else { // 如果总任务数为0,直接把进度设为0(避免出现除以0的致命错误) $prog = 0; }
核心作用是规避除以0的报错,同时算出真实的进度占比。
第二行:格式化进度数字
$prog = $prog > 0 ? number_format($prog,2) : $prog;
同样是三元运算符,作用是优化数字的显示效果:
if ($prog > 0) { // 进度大于0时,把数字格式化为保留两位小数的形式 // 比如原本是33.33333,会变成33.33,显示更规整 $prog = number_format($prog, 2); } else { // 进度为0时,保持原样(无需格式化) $prog = $prog; }
number_format()是PHP内置函数,专门用来调整数字的小数位数、千位分隔符等格式。
内容的提问来源于stack exchange,提问作者portfox
相关产品推荐
相关产品推荐

