Some php logic for rounding currency values ββto a specified amount. (Penny, nickel, penny, quarter, 50c, dollar.)
The calling statement passes the original value as the first argument, and rounding (.05, .10, .25, .50, 1.00) as the second.
eg.
$price = invtround{$value, .10} ;
The function returns a 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 ; }
source share