在PHP项目里,把两个数值换算成百分比是很常见的需求,例如计算订单完成率、用户活跃占比等。实现思路通常是用部分值除以总量,乘100后得到百分数,再根据业务场景做四舍五入或格式化输出。

一、最基础的百分比公式
假设已知完成数 $done 和总数 $total,百分比的计算公式为:
$percent = ($done / $total) * 100;
这里要注意,如果 $total 为 0,直接相除会产生除以零错误,因此必须先做判断。
<?php
$done = 37;
$total = 50;
if ($total == 0) {
$percent = 0;
} else {
$percent = ($done / $total) * 100;
}
echo $percent; // 输出 74
?>
二、使用 round 保留小数位
原始结果可能带很长的小数,用 round() 函数可以控制精度。
<?php $done = 1; $total = 3; $percent = round(($done / $total) * 100, 2); echo $percent; // 输出 33.33 ?>
常用保留位数对照
| 业务场景 | 保留小数 | 示例输出 |
|---|---|---|
| 粗略占比 | 0 | 33% |
| 常规报表 | 2 | 33.33% |
| 高精度计算 | 4 | 33.3333% |
三、用 number_format 格式化输出
如果希望数字带千分位并拼接百分号,可以结合 number_format() 使用。
<?php $done = 1234; $total = 5678; $percent = ($done / $total) * 100; $show = number_format($percent, 2) . '%'; echo $show; // 输出 21.73% ?>
四、sprintf 统一格式写法
使用 sprintf() 能让代码更简洁,直接定义输出模板。
<?php
function toPercent($done, $total, $decimals = 2) {
if ($total == 0) {
return '0%';
}
$value = ($done / $total) * 100;
return sprintf('%.' . $decimals . 'f%%', $value);
}
echo toPercent(3, 8); // 输出 37.50%
?>
五、封装成通用方法
实际开发中建议封装工具函数,避免重复判断除以零和格式问题。
<?php
class PercentHelper {
public static function calc($part, $all, $decimals = 2) {
if (!is_numeric($all) || $all == 0) {
return '0%';
}
$rate = ($part / $all) * 100;
return round($rate, $decimals) . '%';
}
}
echo PercentHelper::calc(5, 20); // 输出 25%
?>
六、注意事项
- 除法前务必确认分母不为零,否则会报警告。
- 浮点数运算可能有极小误差,展示前四舍五入更稳妥。
- 前端如果还要二次计算,建议返回原始比值而不是拼好百分号的字符串。
总结:PHP计算百分比怎么写,本质就是比值乘100加格式化。选对 round、number_format 或 sprintf,就能轻松实现数值转百分比公式方法。