首页 > 解决方案 > 生成两个数字之间的变化百分比——相对于较小的数字

问题描述

我有一个函数,它返回将当前值与前一个值进行比较的增长百分比。该功能唯一要做的就是将本周的注册用户数与前一周的注册用户数进行比较。在这两个值中,您必须返回增长或减少的百分比。

/**
 * 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。有谁知道如何解决这个问题?谢谢!

标签: phpmatharithmetic-expressions

解决方案


使除数成为两个输入中较小的一个:

代码:(演示

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%

推荐阅读