floor()
Функция floor() в PHP округляет число вниз до ближайшего целого. Синтаксис, примеры с отрицательными числами и сравнение с ceil() и round().
Функция floor() в PHP округляет число вниз до ближайшего целого — то есть возвращает наибольшее целое число, которое меньше или равно заданному значению. «Вниз» здесь всегда означает в сторону отрицательной бесконечности — именно в этом чаще всего ошибаются. На этой странице рассматриваются синтаксис, поведение floor() с положительными и отрицательными числами, тип возвращаемого значения, а также ситуации, когда её стоит предпочесть ceil(), round() или intdiv().
Синтаксис
floor(int|float $num): float$num— значение, которое нужно округлить вниз. Может бытьintилиfloat.- Возвращаемое значение — результат всегда возвращается как
float, даже если представляет целое число. То естьfloor(7)даёт7.0, а не7. Если нужно настоящее целое число, приведите результат:(int) floor($num).
Базовый пример
Мы присваиваем float переменной $number, передаём её в floor(), и функция возвращает 3 — наибольшее целое число, не превышающее 3.14. Всё, что идёт после десятичной точки, для положительных чисел просто отбрасывается.
Как floor() обрабатывает отрицательные числа
Именно здесь возникает путаница. floor() округляет в сторону отрицательной бесконечности, поэтому отрицательное значение округляется от нуля, а не к нему.
<?php
echo floor(4.7); // 4
echo "\n";
echo floor(-4.7); // -5 (down means more negative)
echo "\n";
echo floor(-4.1); // -5
echo "\n";
echo floor(8); // 8 (already an integer)
?>Для -4.7 целые числа ниже него — это -5, -6, ...; наибольшее из них — -5. Если вам нужно -4 (округление к нулю), используйте ceil() или приведение типа (int) -4.7.
floor() vs. ceil() vs. round()
Все три функции возвращают целые числа, но различаются направлением округления:
| Функция | Направление | floor(2.5) / ceil(2.5) / round(2.5) |
|---|---|---|
floor() | Всегда вниз (к −∞) | 2.0 |
ceil() | Всегда вверх (к +∞) | 3.0 |
round() | К ближайшему, половины — вверх по умолчанию | 3.0 |
<?php
echo floor(2.5); // 2
echo "\n";
echo ceil(2.5); // 3
echo "\n";
echo round(2.5); // 3
?>Когда использовать floor()?
floor() применяется везде, где нужно целое количество, которое никогда не должно превышать действительное значение:
- Пагинация — количество полных страниц:
floor($totalItems / $perPage). - Время/единицы — целые часы из минут:
floor($minutes / 60). - Деньги/количество — сколько целых товаров помещается в бюджет:
floor($budget / $price).
<?php
$totalItems = 47;
$perPage = 10;
$fullPages = floor($totalItems / $perPage);
echo "Full pages: " . $fullPages; // Full pages: 4
?>Примечание: Для целочисленного деления можно также использовать
intdiv(), который возвращает настоящийintи выглядит понятнее, когда оба операнда — целые числа. Используйтеfloor(), когда речь идёт о числах с плавающей точкой.
Заключение
floor() всегда округляет вниз в сторону отрицательной бесконечности и возвращает float. Помните, что отрицательные числа округляются от нуля, и приводите результат к (int), если нужен целочисленный тип. Для округления в обратную сторону используйте ceil(), для округления до ближайшего значения — round(), а для форматирования чисел с разделителями тысяч обратитесь к number_format().