ceil()
Aprende a usar la función ceil() en PHP para redondear números hacia arriba al entero más cercano, con ejemplos y casos de uso prácticos.
La función ceil() de PHP redondea un número hacia arriba hasta el siguiente número entero — en dirección al infinito positivo. El nombre proviene de "ceiling" (techo): siempre devuelve el menor valor entero que sea mayor o igual a la entrada. Esta página explica la sintaxis, el sorprendente tipo de retorno, el comportamiento con números negativos y los casos prácticos en los que redondear hacia arriba es exactamente lo que necesitas (paginación, precios, tamaños de lote).
Sintaxis
ceil(int|float $num): float$num— el valor a redondear. PHP acepta unintofloat; las cadenas numéricas se convierten automáticamente.- Valor de retorno — el siguiente número entero hacia arriba, devuelto como
float, no comoint(más sobre eso a continuación).
Ejemplo básico
4.2 está entre 4 y 5, y ceil() siempre se mueve hacia arriba, por lo que el resultado es 5. Incluso 4.0001 se redondea a 5. Un valor que ya es un número entero se devuelve sin cambios.
ceil() devuelve un float
Esto confunde a muchos principiantes: ceil() devuelve un float, aunque el valor parezca un entero.
<?php
$result = ceil(4.2);
echo $result; // 5 (echo hides the .0)
var_dump($result); // float(5)
echo gettype($result); // double
?>echo muestra 5 porque PHP omite el .0 al imprimir, pero el tipo subyacente sigue siendo float. Si necesitas un int verdadero — por ejemplo, para usar el valor como clave de array o para satisfacer una declaración de tipo estricta — conviértelo explícitamente con intval() o (int):
<?php
$pages = (int) ceil(95 / 10);
var_dump($pages); // int(10)
?>Cómo maneja ceil() los números negativos
Redondear "hacia arriba" significa moverse en dirección al infinito positivo, por lo que con números negativos el resultado está más cerca de cero, no más lejos de él.
<?php
echo ceil(-4.2); // -4 (toward zero, not -5)
echo "\n";
echo ceil(-4.8); // -4
?>-4.2 se redondea a -4 porque -4 es mayor que -4.2. Esta es la diferencia clave respecto a un ingenuo "siempre suma 1" — ceil() sigue la recta numérica, no la magnitud.
ceil() vs. floor() vs. round()
Estas tres funciones reducen un número a un valor entero, pero eligen direcciones diferentes:
| Función | Dirección | ceil(4.2) | floor(4.2) | round(4.2) |
|---|---|---|---|---|
ceil() | Siempre hacia arriba | 5 | — | — |
floor() | Siempre hacia abajo | — | 4 | — |
round() | El más cercano | — | — | 4 |
Usa ceil() cuando "cualquier resto significa uno más" — floor() siempre descarta la fracción, y round() elige el número entero más cercano.
Casos de uso prácticos
Paginación — ¿cuántas páginas necesito? Si tienes 95 elementos y muestras 10 por página, la última página parcial también cuenta:
<?php
$total_items = 95;
$per_page = 10;
$total_pages = ceil($total_items / $per_page);
echo $total_pages; // 10
?>95 / 10 es 9.5; floor() daría 9 y perdería los últimos 5 elementos, por eso ceil() es la opción correcta aquí.
Redondear un precio hacia arriba al siguiente centavo o cobrar en unidades enteras funciona de la misma manera — cualquier resto te lleva a la siguiente unidad.
Errores comunes
- No es un entero. Compara contra números, no tipos:
ceil(4.2) === 5esfalse(float vs int), mientras queceil(4.2) == 5estrue. Convierte con(int)cuando necesites un entero. - Precisión de punto flotante. Como
$numes unfloat, pequeños errores de representación pueden sorprenderte en ocasiones (por ejemplo, un valor que "debería" ser exactamente5.0almacenado como5.00000001). Para divisas, prefiere centavos enteros sobre dólares de punto flotante. - Dirección con negativos. Recuerda que
ceil(-4.5)es-4, no-5.
Conclusión
ceil() redondea un número hacia arriba al valor entero más cercano y lo devuelve como float. Úsala siempre que una fracción restante deba "contar como uno más" — paginación, tamaños de lote o precios. Combínala con sus funciones hermanas floor() y round(), y convierte el resultado con intval() cuando realmente necesites un int.