PHP, округление до десятков и сотен в большую сторону

четверг, 10 ноября 2011 г.

Чтобы цена товара в интернет-магазине не была отпугивающей для посетителя, иногда нужно округлить её до целых десятков. Например, 113 руб до 120 руб, 458 руб до 460 руб.
В PHP есть готовые функции округления ceil и round, но в исходном виде для текущей задачи они не совсем подходят.
Так что кусочек простого и понятного кода вам в помощь:

$p = 112.12; // 112 рублей 12 копеек
echo ceil($p/10) * 10; // 120 рублей ровно

если 10 сменить на 100, то получим округление до сотен и цена 112.12 превратится в 200 рублей.

19 коммент.:

Анонимный комментирует...

Спасибо!

GIN комментирует...

Да без проблем ) Всегда рад.

Анонимный комментирует...

Супер! СПасибо! Очень долго искал!

Александр Когтев комментирует...

Вариант, если нужно округление например по 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 рублей ровно

GIN комментирует...

Александр, спасибо за вариант!

Basyanya комментирует...

Вы плохо читали описание функции round.
Вот пример из описания функции, по ссылке из вашей статьи:
echo round(1241757, -3); // 1242000

Соответственно для округления до сотен надо использовать -2, до десятков -1.

GIN комментирует...

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 и т.д. ((((

GIN комментирует...

Алексей, так округляйте цену при записи товара в базу, никаких проблем.

Алексей Рапецкий комментирует...

так и делаю. Жаль что нельзя как-то через маску в настройках валюты

Александр комментирует...

Выручили! Единственный сайт где готовое решение есть, а не целый свиток теории и предположений :)

Анонимный комментирует...

хорошее решение спасибо!

Анонимный комментирует...

Вариант, с округление по 5. Почему не ceil($price/5)*5 ?

Copyright © 2010 WEB IT blog