一尘不染

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

php

因此,我需要创建以下函数,但是如果不进行复杂的数学运算,我的头将无法想到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,2,1.83 = 1.50)

我已经在Google上搜索了2个小时,而出现的唯一内容就是Excel论坛。一些简单的PHP行是否可能?


阅读 725

收藏
2020-05-29

共1个答案

一尘不染

既然你正在寻找 四分之三
.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
2020-05-29