W3docs

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).

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

php— editable, runs on the server

Мы присваиваем 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().

Практика

Практика
Что делает функция floor() в PHP?
Что делает функция floor() в PHP?
Was this page helpful?