Чтобы цена товара в интернет-магазине не была отпугивающей для посетителя, иногда нужно округлить её до целых десятков. Например, 113 руб до 120 руб, 458 руб до 460 руб.
В PHP есть готовые функции округления ceil и round, но в исходном виде для текущей задачи они не совсем подходят.
Так что кусочек простого и понятного кода вам в помощь:
если 10 сменить на 100, то получим округление до сотен и цена 112.12 превратится в 200 рублей.
В PHP есть готовые функции округления ceil и round, но в исходном виде для текущей задачи они не совсем подходят.
Так что кусочек простого и понятного кода вам в помощь:
$p = 112.12; // 112 рублей 12 копеек
echo ceil($p/10) * 10; // 120 рублей ровно
если 10 сменить на 100, то получим округление до сотен и цена 112.12 превратится в 200 рублей.
18 коммент.:
Да без проблем ) Всегда рад.
Супер! СПасибо! Очень долго искал!
Вариант, если нужно округление например по 5, а не по 10.
$p = 112.12; // 112 рублей 12 копеек
$t_p=ceil($p/10) * 10;// 120 рублей ровно
$p=($t_p-$p)>=5?$t_p-5:$t_p;
echo $p; // 115 рублей ровно
Александр, спасибо за вариант!
Вы плохо читали описание функции round.
Вот пример из описания функции, по ссылке из вашей статьи:
echo round(1241757, -3); // 1242000
Соответственно для округления до сотен надо использовать -2, до десятков -1.
Basyanya, это вы плохо читали документацию. Задача стоит - "округлить до десятков и сотен в большую сторону".
Теперь специально для вас:
echo round(112.12, -1); // 110
echo round(115.12, -1); // 120
echo round(112.12, -2); // 100
echo round(152.12, -2); // 200
Все нормальные программисты знают как работает round и ceil, но задача в посте была округлить в большую сторону даже если по логике round() оно должно "окрулиться" в меньшую. Код выше тому пример.
Спасибо за ваше решение данной проблемы!
Логично, спасибо!
Отличное решение. Спасибо большое.
спасибо
спасибо
вариант с округлением по 5 знак меньше $p=($t_p-$p)<=5?$t_p-5:$t_p;
извиняюсь. ) со знаком все верно!
$p=($t_p-$p)>=5?$t_p-5:$t_p;
а в корзину все равно при таком подходе товары будут ложится с ценой 133 и т.д. ((((
Алексей, так округляйте цену при записи товара в базу, никаких проблем.
так и делаю. Жаль что нельзя как-то через маску в настройках валюты
Выручили! Единственный сайт где готовое решение есть, а не целый свиток теории и предположений :)
хорошее решение спасибо!
Вариант, с округление по 5. Почему не ceil($price/5)*5 ?
Отправить комментарий