ceil()
Aprenda a usar a função ceil() no PHP para arredondar números para cima até o inteiro mais próximo, com exemplos práticos.
A função ceil() do PHP arredonda um número para cima até o próximo número inteiro — em direção ao infinito positivo. O nome vem de "teto" (ceiling): ela sempre retorna o menor valor inteiro que seja maior ou igual ao valor de entrada. Esta página explica a sintaxe, o tipo de retorno surpreendente, o comportamento com números negativos e os casos práticos em que arredondar para cima é exatamente o que você precisa (paginação, preços, tamanhos de lote).
Sintaxe
ceil(int|float $num): float$num— o valor a arredondar. PHP aceita umintoufloat; strings numéricas são convertidas automaticamente.- Valor de retorno — o próximo número inteiro mais alto, retornado como
float, não comoint(mais sobre isso abaixo).
Exemplo básico
4.2 está entre 4 e 5, e ceil() sempre move para cima, portanto o resultado é 5. Até mesmo 4.0001 arredonda para 5. Um valor que já é um número inteiro é retornado sem alteração.
ceil() retorna um float
Isso pega muitos iniciantes de surpresa: ceil() retorna um float, mesmo que o valor pareça um inteiro.
<?php
$result = ceil(4.2);
echo $result; // 5 (echo hides the .0)
var_dump($result); // float(5)
echo gettype($result); // double
?>echo exibe 5 porque o PHP omite o .0 ao imprimir, mas o tipo subjacente ainda é float. Se você precisar de um int verdadeiro — por exemplo, para usar o valor como chave de array ou para satisfazer uma declaração de tipo estrito — converta-o explicitamente com intval() ou (int):
<?php
$pages = (int) ceil(95 / 10);
var_dump($pages); // int(10)
?>Como ceil() lida com números negativos
Arredondar "para cima" significa mover em direção ao infinito positivo, portanto, para números negativos, o resultado fica mais próximo de zero, não mais distante.
<?php
echo ceil(-4.2); // -4 (toward zero, not -5)
echo "\n";
echo ceil(-4.8); // -4
?>-4.2 arredonda para -4 porque -4 é maior do que -4.2. Esta é a diferença fundamental em relação a um simples "sempre somar 1" — ceil() segue a reta numérica, não a magnitude.
ceil() vs. floor() vs. round()
Essas três funções reduzem um número a um valor inteiro, mas escolhem direções diferentes:
| Função | Direção | ceil(4.2) | floor(4.2) | round(4.2) |
|---|---|---|---|---|
ceil() | Sempre para cima | 5 | — | — |
floor() | Sempre para baixo | — | 4 | — |
round() | Mais próximo | — | — | 4 |
Use ceil() quando "qualquer resto significa mais um" — floor() sempre descarta a fração, e round() escolhe o número inteiro mais próximo.
Casos de uso práticos
Paginação — quantas páginas são necessárias? Se você tem 95 itens e exibe 10 por página, a última página parcial ainda conta:
<?php
$total_items = 95;
$per_page = 10;
$total_pages = ceil($total_items / $per_page);
echo $total_pages; // 10
?>95 / 10 é 9.5; floor() daria 9 e perderia os últimos 5 itens, portanto ceil() é a escolha correta aqui.
Arredondar um preço para o próximo centavo ou cobrar em unidades inteiras funciona da mesma forma — qualquer resto aumenta para a próxima unidade.
Armadilhas comuns
- Não é um inteiro. Compare com números, não com tipos:
ceil(4.2) === 5éfalse(float vs int), enquantoceil(4.2) == 5étrue. Use(int)quando precisar de um inteiro. - Precisão de ponto flutuante. Como
$numé umfloat, pequenos erros de representação podem surpreendê-lo ocasionalmente (por exemplo, um valor que "deveria" ser exatamente5.0sendo armazenado como5.00000001). Para valores monetários, prefira centavos inteiros a valores em reais com ponto flutuante. - Direção com negativos. Lembre-se:
ceil(-4.5)é-4, não-5.
Conclusão
ceil() arredonda um número para cima até o valor inteiro mais próximo e o retorna como float. Use-a sempre que uma fração restante deva "contar como mais um" — paginação, dimensionamento de lotes ou precificação. Combine-a com suas irmãs floor() e round(), e converta o resultado com intval() quando precisar genuinamente de um int.