Ceil: примеры (PHP)

Округление вверх: практическое применение ceil в PHP
Раздел: Математические функции
ceil(int|float $num): float
Основные сведения о функции ceil()

Функция 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);     // 5
5
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);   // 0
0
0
0
Похожие функции в PHP

В 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()

Функция 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)); // -4

Ceil в 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

Наиболее значимые изменения произошли в PHP 8.

Строгая типизация в PHP 8.0

В PHP 8 функция ceil() принимает только аргументы типов int или float. Передача нечисловой строки, массива или объекта вызывает TypeError. Ранее такие значения преобразовывались или давали предупреждения.

// До PHP 8
// echo ceil("test"); // 0 с предупреждением

// PHP 8
// echo ceil("test"); // TypeError
Внутренние улучшения

Изменения в ядре PHP направлены на повышение производительности и согласованности работы математических функций, но без изменения видимого поведения.

Расширенные примеры применения
Расчет количества страниц для пагинации

Классический пример, где общее количество элементов делится на размер страницы, и результат округляется вверх.

Пример php
$totalItems = 47;
$itemsPerPage = 10;
$totalPages = ceil($totalItems / $itemsPerPage); // 4.7 -> 5
echo $totalPages;
5
Финансовые расчеты с минимальными единицами

Определение минимального количества монет или купюр для выплаты суммы.

Пример php
$amount = 123.45;
$minBill = 10;
$billsNeeded = ceil($amount / $minBill); // 12.345 -> 13
echo $billsNeeded; // Необходимо 13 купюр по 10
13
Работа с большими числами и научной нотацией

Функция корректно обрабатывает числа в научной нотации.

Пример php
echo ceil(2.3e-5); // 1 (0.000023 -> 1)
echo ceil(1.5e20); // 1.5E+20 (остается в экспоненциальной форме)
1
1.5E+20
Использование в условиях и циклах

Применение для определения границ итераций с дробным шагом.

Пример php
$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.

Пример php
echo ceil(INF);   // INF
var_dump(ceil(NAN)); // float(NAN)
INF
float(NAN)

PHP ceil function comments

En
Ceil Rounds fractions up