Некоторая логика php для округления валютных значений
до указанной суммы. (Пенни, никель, десять центов, квартал, 50 центов, доллар.)
Вызывающий оператор передает исходное значение в качестве первого аргумента, а единицу округления (.05, .10, .25, .50, 1.00) - в качестве второго.
, например
$price = invtround{$value, .10} ;
Функция возвращает округленное значение.
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 ;
}