Chris
Chris

Reputation: 4370

Round integer to nearest multiple of 5 in PHP

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);

Upvotes: 7

Views: 12568

Answers (3)

john smith
john smith

Reputation: 1

Well, facing this issue while helping make an POS for a Canadian company, came up with this solution, hope it helps someone. (Canada removed the penny in 2012). Also includes for doing tax included pricing, just pass '1' as second argh.

    //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;
}

Upvotes: 0

xelber
xelber

Reputation: 4637

Back to maths, since round works with decimals, multiply by 5 and divide by 10 and then round, it. Multiply by 5 again to get what u want. (Other answer works as well, just a different way of looking at it)

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

echo round_5(48);

See if this helps

Upvotes: 0

alex
alex

Reputation: 490173

Use round() instead of ceil().

5 * round($n / 5);

ceil() rounds a floating point number up to its next integer in sequence. round() will round to the nearest integer using standard rounding rules.

Upvotes: 25

Related Questions