W3docs

ceil()

Функция ceil() в PHP округляет число вверх до ближайшего целого. Синтаксис, возвращаемый тип, работа с отрицательными числами и примеры.

Функция PHP ceil() округляет число вверх до следующего целого — в сторону положительной бесконечности. Название происходит от слова «ceiling» (потолок): функция всегда возвращает наименьшее целое значение, которое больше или равно входному числу. На этой странице рассматриваются синтаксис, неожиданный тип возвращаемого значения, поведение с отрицательными числами и практические случаи, когда округление вверх — это именно то, что нужно (пагинация, ценообразование, размеры партий).

Синтаксис

ceil(int|float $num): float
  • $num — значение для округления. PHP принимает int или float; числовые строки преобразуются автоматически.
  • Возвращаемое значение — ближайшее большее целое число, возвращаемое как float, а не int (подробнее об этом ниже).

Базовый пример

php— editable, runs on the server

4.2 находится между 4 и 5, а ceil() всегда движется вверх, поэтому результат равен 5. Даже 4.0001 округляется до 5. Значение, которое уже является целым числом, возвращается без изменений.

ceil() возвращает float

Это часто сбивает с толку новичков: ceil() возвращает float, даже если значение выглядит как целое число.

<?php
$result = ceil(4.2);

echo $result;          // 5   (echo hides the .0)
var_dump($result);     // float(5)
echo gettype($result); // double
?>

echo выводит 5, потому что PHP опускает завершающий .0 при выводе, однако внутренний тип по-прежнему float. Если вам нужен настоящий int — например, чтобы использовать значение как ключ array или удовлетворить строгую подсказку типа — явно приведите его с помощью intval() или (int):

<?php
$pages = (int) ceil(95 / 10);
var_dump($pages); // int(10)
?>

Как ceil() обрабатывает отрицательные числа

Округление «вверх» означает движение в сторону положительной бесконечности, поэтому для отрицательных чисел результат ближе к нулю, а не дальше от него.

<?php
echo ceil(-4.2); // -4   (toward zero, not -5)
echo "\n";
echo ceil(-4.8); // -4
?>

-4.2 округляется до -4, потому что -4 больше, чем -4.2. Это ключевое отличие от наивного подхода «всегда прибавить 1» — ceil() следует числовой прямой, а не абсолютной величине.

ceil() vs. floor() vs. round()

Все три функции приводят число к целому значению, но выбирают разные направления:

ФункцияНаправлениеceil(4.2)floor(4.2)round(4.2)
ceil()Всегда вверх5
floor()Всегда вниз4
round()До ближайшего4

Используйте ceil(), когда «любой остаток означает ещё одну единицу» — floor() всегда отбрасывает дробную часть, а round() выбирает ближайшее целое.

Практические случаи применения

Пагинация — сколько страниц нужно? Если у вас 95 элементов и на странице отображается 10, последняя неполная страница тоже считается:

<?php
$total_items = 95;
$per_page    = 10;

$total_pages = ceil($total_items / $per_page);
echo $total_pages; // 10
?>

95 / 10 равно 9.5; floor() дал бы 9 и «потерял» последние 5 элементов, поэтому здесь правильный выбор — ceil().

Округление цены вверх до следующего цента или оплата целыми единицами работает так же — любой остаток переводит вас к следующей единице.

Распространённые ошибки

  • Это не целое число. Сравнивайте по значению, а не по типу: ceil(4.2) === 5 равно false (float vs int), тогда как ceil(4.2) == 5 равно true. Используйте приведение (int), когда нужен целочисленный тип.
  • Точность с плавающей запятой. Поскольку $num является float, незначительные ошибки представления могут иногда удивить вас (например, значение, которое «должно» быть ровно 5.0, может храниться как 5.00000001). Для работы с денежными суммами предпочитайте целые числа в центах вместо чисел с плавающей запятой в долларах.
  • Направление с отрицательными числами. Помните, что ceil(-4.5) равно -4, а не -5.

Заключение

ceil() округляет число вверх до ближайшего целого и возвращает его как float. Используйте эту функцию всякий раз, когда дробный остаток должен «считаться за ещё одну единицу» — пагинация, размеры партий или ценообразование. Используйте её в паре с родственными функциями floor() и round(), а результат приводите через intval(), когда вам действительно нужен int.

Практика

Практика
Какова функция ceil() в PHP?
Какова функция ceil() в PHP?
Was this page helpful?