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);
使用round()
而不是ceil()
.
5 * round($n / 5);
ceil()
将浮点数按顺序向上舍入到下一个整数。round()
将使用标准舍入规则舍入到最接近的整数。
回到数学上来,因为 round 与小数一起使用,乘以 5 除以 10 然后四舍五入。再乘以 5 得到你想要的。(其他答案也有效,只是另一种看待它的方式)
function round_5($in)
{
return round(($in*2)/10)*5;
}
echo round_5(48);
看看这是否有帮助
好吧,在帮助一家加拿大公司制作 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;
}