php - 生成两个数字之间的变化百分比——相对于较小的数字
问题描述
我有一个函数,它返回将当前值与前一个值进行比较的增长百分比。该功能唯一要做的就是将本周的注册用户数与前一周的注册用户数进行比较。在这两个值中,您必须返回增长或减少的百分比。
/**
* Generate percentage change between two numbers.
*
* @param float|int $original
* @param float|int $current
* @param int $precision
* @return string
*/
function parsePercent($original, $current, int $precision = 2): string
{
$result = (($current - $original) / $original) * 100;
return round($result, $precision);
}
当在新值大于原始值的两个数字之间进行评估时,将正确返回百分比。
echo parsePercent(10, 20); // 100%
echo parsePercent(10, 30); // 200%
echo parsePercent(13, 16); // 23.08%
echo parsePercent(11, 22); // 100%
当当前值小于原始值时,就会出现问题。
parsePercent(20, 10); // -50
此时,该函数应该返回 -100 但它返回 -50。有谁知道如何解决这个问题?谢谢!
解决方案
使除数成为两个输入中较小的一个:
代码:(演示)
function parsePercent($original, $current, int $precision = 2): string
{
return round(
($current - $original) / min($original, $current) * 100,
$precision
);
}
echo "\n" . parsePercent(10, 20); // 100%
echo "\n" . parsePercent(10, 30); // 200%
echo "\n" . parsePercent(13, 16); // 23.08%
echo "\n" . parsePercent(11, 22); // 100%
echo "\n" . parsePercent(20, 10); // -100%
推荐阅读
- java - 在 Maven 项目中运行代码...找不到类
- error-handling - Django rest framework 3.10.3 没有运行异常处理程序
- c# - Web API XML反序列化:具有多个具有相同标签名称的子节点的节点
- automapper - 无法将 AutoMapper.Mapper.Map 方法与 ASP.NET Core 3.0 Web API 一起使用
- python - ModuleNotFoundError:QGIS 中没有名为“_tkinter”的模块
- r - 如何使用 facet_wrap 或 facet_grid 对绘图进行刻面?
- javascript - 清除 Javascript 中不需要的代码重复
- oracle - ORA-00907: 缺少右括号
- apache - 将 HTTP 重定向到 HTTPS 并添加 WWW
- python - 如何使用等于函数名称的字符串值调用函数