PHP - как округлять числа
Очень часто в разработке интернет-магазина надо округлять цены в большую или меньшую сторону. Предлагаю рассмотреть функции, которые помогут вам решить проблемы с округлением чисел.
Стандартные функции PHP
Язык программирования PHP имеет 3 основных функции округления:
round() - выполняет стандарное математическое округление. Например, для числа 1.4 результат округления будет 1, а для числа 1.5 результатом будет число 2.
Примеры:
echo round(5.1); // 5
echo round(5.5); // 6
ceil() - округляет до ближайшего большего целого числа. Например, для числа 1.1 результатом округления будет 2.
Примеры:
echo ceil(5.1); // 6
echo ceil(7.5); // 8
floor() - функция, обратная ceil(), то есть округляет до ближайшего меньшего целого числа. Например, число 1.8 функция округлит до 1.
Примеры:
echo floor(4.3); // 4
echo floor(6.9); // 6
Однако часто бывает, что стандартных функций не хватает и приходится придумывать различные конструкции для решения нетиповых задач округления.
Округление числа до сотых
Например, если необходимо округлить число 12.5658 до сотых в большую сторону, может пригодится такая конструкция:
$x = 12.5658
echo ceil($x * 100) / 100; // 12.57
То же самое, только с floor(), если надо округлить в меньшую сторону:
$x = 12.5658
echo floor($x * 100) / 100; // 12.56
С функцией round() все немного проще. Для нее можно указать точность округления:
echo round(12.5658, 2); // 12.57
Округление с коэффициентом
А вот хитрое решение, если надо округлить любой число до какого-нибудь кратного числа. Например, стоит задача округлять цены в интернет-магазине до 50-ти. Т.е. число 120 округлить до 150, а 1210 округлить до 1250 и т.д.
Для решения пододбной задачи я предлагаю воспользоваться функцией:
# Округление целого числа в большую сторону с коэффициентом
function ceilCoefficient($number, $rate = 50)
{
// если число дробное, то округляем его до целого
$number = ceil($number);
// разделим число на коэффициент, а результат округлим в большую сторону. Потом умножим число на округленный коэффициент
$rest = ceil($number / $rate) * $rate;
return $rest;
}
// применение
echo ceilCoefficient(5230, 50); // 5250
echo ceilCoefficient(5230, 100); // 5300
echo ceilCoefficient(180, 50); // 200
echo ceilCoefficient(180, 100); // 200
Вот так используя такой набор функций можно округлять числа без проблем!
-
Станислав 10.12.2020 в 11:48 ОтветитьОшибка в коде. В ретурн нужно поставить рест
-
sovet 10.12.2020 в 12:09 ОтветитьСпасибо, исправили!:)
-
-
Степан 25.09.2018 в 13:13 ОтветитьСпасибо за разъяснение!