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

Вот так используя такой набор функций можно округлять числа без проблем!

Комментарии
  • Александр 13.10.2023 в 06:54 Ответить
    Спасибо за статью. Есть комментарий по округлению до сотых. Например, есть число 67491.01. Оно получается после некоторых вычислений, но для упрощения возьмем как константу. И вот результат функции floot($x*100)/100 будет равно 67491.00 - т.е. потеряется единица. Получается, что такую конструкцию использовать опасно. Я бы предложил использовать sprintf("%.2f",$x*100)/100 Но не уверен, что в какой другой ситуации не всплывет потеря
  • Станислав 10.12.2020 в 11:48 Ответить
    Ошибка в коде. В ретурн нужно поставить рест
    • sovet 10.12.2020 в 12:09 Ответить
      Спасибо, исправили!:)
  • Степан 25.09.2018 в 13:13 Ответить
    Спасибо за разъяснение!