Some php logic to round currency values
to a specified amount. (Penny, nickel, dime, quarter, 50c, dollar.)
The calling statement passes the original value as the first argument, and the rounding unit (.05, .10, .25, .50, 1.00) as the second.
e.g.
$price = invtround{$value, .10} ;
The function returns the rounded value.
function invtround($x,$y)
{
if ($x == 0.01) {
$result = $y ;
}
if ($x == .05) {
$floor = round($y,1) ;
if ($floor > $y) {$floor = $floor - $x ;}
$diff = $y - $floor ;
if ($diff < .03) {$result = $floor ;}
else if ($diff < .08) {$result = $floor + .05;}
else {$result = $floor + .10;}
}
if ($x == .10) {
$floor = round(floor($y*10)/10,1) ;
if ($floor > $y) {$floor = $floor - $x ;}
$diff = $y - $floor ;
if ($diff < .05) {$result = $floor ;}
else {$result = $floor + .10;}
}
if ($x == .25) {
$floor = floor($y*10)/10 ;
$diff = $y - $floor ;
if ($diff < .13) {$result = $floor ;}
else if ($diff < .38) {$result = $floor +.25;}
else if ($diff < .68) {$result = $floor + .50;}
else if ($diff < .88) {$result = $floor + .75;}
else {$result = $floor + 1.0;}
}
if ($x == .50) {
$floor = floor($y*10)/10 ;
$diff = $y - $floor ;
if ($diff < .25) {$result = $floor ;}
else if ($diff < .75) {$result = $floor + .50;}
else {$result = $floor + 1.0;}
}
if ($x == 1.00){$result = round($y,0) ;}
$result = number_format($result,2);
return $result ;
}