6

Searching for a function ro round numbers to the nearest multiple of 5

22 -> 20
23 -> 25
40 -> 40
46 -> 45
48 -> 50

and so on.

Tried this which always returns the higher value:

5 * ceil($n / 5);
4

3 回答 3

24

使用round()而不是ceil().

5 * round($n / 5);

ceil()将浮点数按顺序向上舍入到下一个整数。round()将使用标准舍入规则舍入到最接近的整数。

于 2012-10-16T11:09:30.543 回答
0

回到数学上来,因为 round 与小数一起使用,乘以 5 除以 10 然后四舍五入。再乘以 5 得到你想要的。(其他答案也有效,只是另一种看待它的方式)

function round_5($in)
{
    return round(($in*2)/10)*5;
}

echo round_5(48);

看看这是否有帮助

于 2012-10-16T11:22:08.917 回答
0

好吧,在帮助一家加拿大公司制作 POS 时遇到这个问题,想出了这个解决方案,希望它对某人有所帮助。(加拿大在 2012 年取消了一分钱)。还包括进行含税定价,只需将“1”作为第二个参数传递。

    //calculate price and tax
function calctax($amt,$tax_included = NULL){
  $taxa = 'tax rate 1 here';
  $taxb = 'tax rate 2 here';
  $taxc = ($taxa + $taxb) + 1;
  if(is_null($tax_included)){
    $p = $amt;
   }else{
    $p = number_format(round($amt / $taxc,2),2);
   } 
  $ta = round($p * $taxa,2);
  $tb = round($p * $taxb,2);
  $sp = number_format(round($p+($ta + $tb),2),2);
  $tp = number_format(round(($sp*2)/10,2)*5,2);
  $ret = array($ta,$tb,$tp);
  return $ret;
}
于 2015-12-21T02:37:42.273 回答