floor()
Aprenda a usar a função floor() em PHP para arredondar números para baixo até o inteiro mais próximo, com exemplos e comparações.
A função floor() em PHP arredonda um número para baixo até o inteiro mais próximo — ou seja, retorna o maior inteiro que seja menor ou igual ao valor fornecido. "Para baixo" aqui significa sempre em direção ao infinito negativo, o que é o detalhe que a maioria das pessoas erra. Esta página aborda a sintaxe, o comportamento de floor() com números positivos e negativos, o tipo que ela retorna e quando usá-la em vez de ceil(), round() ou intdiv().
Sintaxe
floor(int|float $num): float$num— o valor a ser arredondado para baixo. Pode ser umintou umfloat.- Valor de retorno — o resultado é sempre retornado como um
float, mesmo quando representa um número inteiro. Portanto,floor(7)retorna7.0, não7. Se você precisar de um inteiro de verdade, converta o resultado:(int) floor($num).
Um exemplo básico
Atribuímos um float a $number, passamos para floor() e a função retorna 3 — o maior inteiro que não é maior que 3.14. Tudo após o ponto decimal é simplesmente descartado para números positivos.
Como floor() lida com números negativos
Esta é a parte que confunde as pessoas. floor() arredonda em direção ao infinito negativo, portanto um valor negativo arredonda para longe de zero, não em direção a ele.
<?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)
?>Para -4.7, os inteiros abaixo dele são -5, -6, ...; o maior deles é -5. Se você quisesse -4 (arredondando em direção a zero), usaria ceil() ou uma conversão como (int) -4.7.
floor() vs. ceil() vs. round()
Estas três funções retornam números inteiros, mas diferem na direção:
| Função | Direção | floor(2.5) / ceil(2.5) / round(2.5) |
|---|---|---|
floor() | Sempre para baixo (em direção a −∞) | 2.0 |
ceil() | Sempre para cima (em direção a +∞) | 3.0 |
round() | Para o mais próximo, meios arredondados para cima por padrão | 3.0 |
<?php
echo floor(2.5); // 2
echo "\n";
echo ceil(2.5); // 3
echo "\n";
echo round(2.5); // 3
?>Quando usar floor()?
floor() é útil sempre que você precisar de uma contagem inteira que nunca deve ultrapassar o valor real:
- Paginação — número de páginas completas:
floor($totalItems / $perPage). - Tempo/unidades — horas inteiras a partir de minutos:
floor($minutes / 60). - Dinheiro/quantidades — quantos itens inteiros cabem em um orçamento:
floor($budget / $price).
<?php
$totalItems = 47;
$perPage = 10;
$fullPages = floor($totalItems / $perPage);
echo "Full pages: " . $fullPages; // Full pages: 4
?>Nota: Para divisão inteira, você também pode usar
intdiv(), que retorna um verdadeirointe é mais claro quando ambos os operandos são inteiros. Usefloor()quando floats estiverem envolvidos.
Conclusão
floor() sempre arredonda para baixo em direção ao infinito negativo e retorna um float. Lembre-se de que números negativos arredondam para longe de zero, e converta para (int) se precisar de um tipo inteiro. Para a direção oposta, use ceil(); para arredondamento ao valor mais próximo, use round(); e para formatar números com separadores de milhares, consulte number_format().