四舍五入到最接近的部分(半,四分之一等)(Rounding to nearest fraction

2019-07-20 00:25发布

所以,我需要创建以下功能,但我的脑袋也想不到的没有复杂的数学在PHP中的任何可能性。

  • 始终到最接近的十进制(1.81 = 1.90,1.89 1.90 = 1.85 1.90 =)
  • 始终至最接近的十进制(1.81 = 1.80,1.89 = 1.80Hz,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)

我已经搜索在谷歌2小时,现在并想出的唯一的东西是Excel的论坛。 是否有可能与PHP的一些简单的线条?

Answer 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
小区(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


Answer 2:

请注意,答案是不是真的防水。 由于我们这里处理花车它不能保证当您通过分母除以圆形数字它返回一个整齐的轮数。 它可能会返回1.499999999999,而不是1.5。 这是浮点数的性质。

另一轮从函数返回的号码前需要。

万一有人在这里的土地从谷歌像我一样:)



Answer 3:

在这里看例子#3,这是你的解决方案的一半- http://php.net/manual/en/function.round.php



Answer 4:

按照mround()在Excel函数:

function MRound($num,$parts) {
    $res = $num * $parts;
    $res = round($res);
    return $res /$parts;
}
echo MRound(-1.38,4);//gives -1.5
echo MRound(-1.37,4);//gives -1.25
echo MRound(1.38,4);//gives 1.5
echo MRound(1.37,4);//gives 1.25


文章来源: Rounding to nearest fraction (half, quarter, etc.)