Ceil: примеры (PHP)
ceil(int|float $num): floatФункция ceil() в PHP выполняет округление дробного числа в большую сторону до ближайшего целого числа. Она принадлежит к математическим функциям языка и часто используется в расчетах, где требуется гарантированное превышение или получение целого значения из дробного.
Функция применяется в финансовых расчетах, разбивке данных на страницы (пагинации), определении количества необходимых единиц ресурсов, а также в любых ситуациях, когда результат деления должен быть целым числом, а остаток требует учета.
Синтаксис функции прост и принимает один обязательный параметр:
float ceil(float|int $num)
Аргумент $num — значение, которое необходимо округлить вверх. В PHP 8 тип аргумента может быть float или int. Функция всегда возвращает значение типа float, даже если результат является целым числом.
Примеры демонстрируют поведение функции с разными типами входных данных.
echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(5); // 55 10 5
При работе с отрицательными числами округление происходит в сторону большего алгебраического значения (к нулю).
echo ceil(-4.3); // -4
echo ceil(-5.9); // -5-4 -5
echo ceil(0); // 0
echo ceil(0.00); // 0
echo ceil(-0.0); // 00 0 0
В PHP существует несколько функций для округления, каждая с уникальным поведением.
Функция floor() округляет число в меньшую сторону. Ее используют, когда нужен гарантированно меньший или равный целый результат.
echo floor(4.9); // 4
echo floor(-4.3); // -5Функция round() выполняет округление до ближайшего целого по математическим правилам (половинные значения округляются в большую сторону по умолчанию). Позволяет задать точность (количество знаков после запятой). Ее применяют для классического математического округления.
echo round(4.5); // 5
echo round(4.4); // 4
echo round(1.955, 2); // 1.96Функция intval() получает целое значение переменной, но путем приведения типа, а не округления. Для положительных чисел поведение похоже на floor(), но принцип работы отличается.
echo intval(4.9); // 4 (просто отбрасывается дробная часть)Концепция округления вверх реализована во многих языках программирования.
Ceil в Python
В модуле math существует функция ceil(). Важное отличие: она возвращает тип int, а не float.
import math
print(math.ceil(4.3)) # 5
print(type(math.ceil(4.3))) # <class 'int'>5 <class 'int'>
Ceil в Javascript
Метод Math.ceil() ведет себя аналогично PHP. Все числовые значения в JS являются числами с плавающей точкой.
console.log(Math.ceil(4.3)); // 5
console.log(Math.ceil(-4.3)); // -4Ceil в MySQL
Функция CEILING() или ее синоним CEIL(). Возвращает целочисленное значение, но в формате с плавающей точкой или как целое, в зависимости от контекста.
SELECT CEILING(4.3); -- 5
SELECT CEIL(-4.3); -- -4Функция всегда возвращает float, что может привести к неожиданностям при строгом сравнении типов.
$result = ceil(5);
if ($result === 5) { // false, потому что $result имеет тип float(5)
echo 'Равно';
} else {
echo 'Не равно';
}Не равно
В PHP 8 функция вызывает TypeError для нечисловых строк. В более ранних версиях такое использование могло давать неочевидные результаты.
// PHP 8 и выше
// echo ceil("10.5abc"); // TypeError: ceil(): Argument #1 ($num) must be of type int|float, string givenИногда разработчики путают направление округления для отрицательных чисел.
// Ожидание: -5, Реальность: -4
$value = -4.3;
$rounded = ceil($value); // -4, а не -5Наиболее значимые изменения произошли в PHP 8.
В PHP 8 функция ceil() принимает только аргументы типов int или float. Передача нечисловой строки, массива или объекта вызывает TypeError. Ранее такие значения преобразовывались или давали предупреждения.
// До PHP 8
// echo ceil("test"); // 0 с предупреждением
// PHP 8
// echo ceil("test"); // TypeErrorИзменения в ядре PHP направлены на повышение производительности и согласованности работы математических функций, но без изменения видимого поведения.
Классический пример, где общее количество элементов делится на размер страницы, и результат округляется вверх.
$totalItems = 47;
$itemsPerPage = 10;
$totalPages = ceil($totalItems / $itemsPerPage); // 4.7 -> 5
echo $totalPages;5
Определение минимального количества монет или купюр для выплаты суммы.
$amount = 123.45;
$minBill = 10;
$billsNeeded = ceil($amount / $minBill); // 12.345 -> 13
echo $billsNeeded; // Необходимо 13 купюр по 1013
Функция корректно обрабатывает числа в научной нотации.
echo ceil(2.3e-5); // 1 (0.000023 -> 1)
echo ceil(1.5e20); // 1.5E+20 (остается в экспоненциальной форме)1 1.5E+20
Применение для определения границ итераций с дробным шагом.
$start = 0;
$end = 2.7;
$step = 0.7;
for($i = $start; $i < $end; $i += $step) {
echo round($i, 1) . ' ';
}
echo '\nИтераций: ' . ceil(($end - $start) / $step);0 0.7 1.4 2.1 Итераций: 4
Проверка поведения с бесконечностью и NAN.
echo ceil(INF); // INF
var_dump(ceil(NAN)); // float(NAN)INF float(NAN)