Если мы разделим цену на целые и дробные части, то мы можем округлить дроби и использовать str_pad, чтобы убедиться, что мы не теряем цифру (47,9 вместо 47,90)
Поскольку мы делим дробь на 10, мы получаем новую дробь, которую можно округлить с нулевой точностью.
Затем умножьте его на 10, чтобы получить его «обратно», как первоначально.
function round_price_product( $price ){
// Return rounded price
$parts = explode(".", $price);
$parts[1] = round($parts[1]/10,0)*10;
if($parts[1] == 100) { // round up to next integer
$parts[0]++;
$parts[1] = 0;
}
return $parts[0] . "." . str_pad($parts[1], 2, 0, STR_PAD_RIGHT);
}
echo round_price_product("47.92"); //47.90
// 47.95 -> 48.00
// 47.02 -> 47.00
https://3v4l.org/92sO1