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

31 php printf rounding floor ceil

所以,我需要创建以下函数,但是如果没有复杂的数学运算,我的脑袋就不会想到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 /×.00(1.81 = 2,1.32 = 1.50)
  • 始终至最接近的X.25/X.50/X.75 /×.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行?

Wis*_*guy 96

既然你正在寻找四分之三(.00,.25,.50,.75),乘以4你的电话号码,向最接近的整数根据需要(floor如果向下,ceil如果向上),然后除以4.

1.32,降到最接近的第四位:

1.32*4 = 5.28
楼层(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
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

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

  • @Simon `round(round(2.24 * 4) / 4, 2)`:内部 round 函数使其捕捉到最接近的整数。除法可能会导致奇怪的浮点数,因此外部舍入函数将其四舍五入到小数点后两位。 (4认同)