四舍五入到最接近的分数(半、四分之一等)

2022-08-30 11:15:12

所以,我需要创建以下函数,但是如果没有复杂的数学运算,我的脑袋就无法想到PHP中的任何可能性。

  • 始终向上舍入到最接近的小数点 (1.81 = 1.90, 1.89 = 1.90, 1.85 = 1.90)
  • 始终向下舍入到最接近的小数点(1.81 = 1.80,1.89 = 1.80,1.85 = 1.80)
  • 始终向上舍入到最接近的 x.25 / x.50 / x.75 / x.00 (1.81 = 2, 1.32 = 1.50)
  • 舍入始终向下舍入到最接近的 x.25 / x.50 / x.75 / x.00 (1.81 = 1.75, 1.32 = 1.25)
  • 始终向上舍入到最接近的 x.50 / 1 (1.23 = 1.50, 1.83 = 2)
  • 舍入始终向下舍入到最接近的 x.50 / 1 (1.23 = 1, 1.83 = 1.50)

我已经在Google上搜索了2个小时,唯一出现的东西是Excel论坛。有没有可能用一些简单的PHP行?


答案 1

由于您要查找四分之一(,,,),请将您的数字乘以4,根据需要舍入为最接近的整数(如果向下,如果向上),然后除以4。.00.25.50.75floorceil

1.32,下降到最接近的第四个

1.32 * 4 = 5.28
floor(5.28) = 5.00
5.00 / 4 = 1.25

同样的原则也适用于任何其他分数,例如分之一或八分之一(,)。。例如:.0.125.25.375.5.625.75.875

1.77,直到最接近的八分之一

1.77 * 8 = 14.16
ceil(14.16) = 15.00
15.00 / 8 = 1.875


只是为了好玩,你可以写一个这样的函数:

function floorToFraction($number, $denominator = 1)
{
    $x = $number * $denominator;
    $x = floor($x);
    $x = $x / $denominator;
    return $x;
}

echo floorToFraction(1.82);      // 1
echo floorToFraction(1.82, 2);   // 1.5
echo floorToFraction(1.82, 3);   // 1.6666666666667
echo floorToFraction(1.82, 4);   // 1.75
echo floorToFraction(1.82, 9);   // 1.7777777777778
echo floorToFraction(1.82, 25);  // 1.8

答案 2

请注意,答案并不是真正的水密性。由于我们在这里处理的是浮点数,因此不能保证当您将舍入的数字除以分母时,它会返回一个整齐的整数。它可能会返回 1.4999999999999 而不是 1.5。这是浮点数的本质。

在从函数返回数字之前,需要再进行一轮。

以防万一有人像我一样从谷歌来到这里:)


推荐