在PHP中舍入到最接近的五

ahm*_*kat 57 php function rounding

我想要一个php函数,当用52调用它时返回55.

我试过这个round()功能:

echo round(94, -1); // 90
Run Code Online (Sandbox Code Playgroud)

它返回90但我想要95.

谢谢.

SW4*_*SW4 142

这可以通过多种方式完成,具体取决于您的首选舍入约定:

1.舍入到下一个 5的倍数,排除当前的数字

行为:50输出55,52输出55

function roundUpToAny($n,$x=5) {
    return round(($n+$x/2)/$x)*$x;
}
Run Code Online (Sandbox Code Playgroud)

2.舍入到最接近的5的倍数,包括当前的数字

行为:50输出50,52输出55,50.25输出50

function roundUpToAny($n,$x=5) {
    return (round($n)%$x === 0) ? round($n) : round(($n+$x/2)/$x)*$x;
}
Run Code Online (Sandbox Code Playgroud)

3.向上舍入到整数,然后到最接近的5的倍数

行为:50输出50,52输出55,50.25输出55

function roundUpToAny($n,$x=5) {
    return (ceil($n)%$x === 0) ? ceil($n) : round(($n+$x/2)/$x)*$x;
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:roundUpToAny(5)使用此函数返回10. (8认同)
  • @Ryan - 我添加了一个额外的实现,在初始数字是5的倍数或者传递的舍入数量的情况下忽略了约定 (2认同)

jen*_*ram 73

  1. 除以5
  2. round()(或者ceil() 如果你想要总结)
  3. 乘以5.

值5(分辨率/粒度)可以是任何值 - 在步骤1和3中都替换它

  • 所以,`ceil($ the_number/5)*5`是最终答案.或者`round($ the_number/5)*5`如果你想要舍入到最接近的5. (10认同)
  • 这个解决方案在各个方面都比公认的答案更好,它更容易理解,更快并且适用于任何数字(包括浮点数) (3认同)

Pau*_*ams 60

向下舍入:

$x = floor($x/5) * 5;
Run Code Online (Sandbox Code Playgroud)

围捕:

$x = ceil($x/5) * 5;
Run Code Online (Sandbox Code Playgroud)

舍入到最近(向上或向下):

$x = round($x/5) * 5;
Run Code Online (Sandbox Code Playgroud)