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

时间:2013-02-15 21:11:15

标签: php rounding printf 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 / 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行?

4 个答案:

答案 0 :(得分:87)

由于您正在寻找第四个.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,{ {1}},.375.5.625.75)。例如:

1.77,最接近第八个

  

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


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

.875

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

根据Excel中的mround()功能:

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