ceil()
Découvrez la fonction ceil() en PHP, qui arrondit un nombre vers le haut à l'entier supérieur le plus proche.
La fonction PHP ceil() arrondit un nombre vers le haut jusqu'au nombre entier suivant — en direction de l'infini positif. Le nom vient du mot anglais « ceiling » (plafond) : elle retourne toujours la plus petite valeur entière supérieure ou égale à la valeur d'entrée. Cette page explique la syntaxe, le type de retour surprenant, le comportement avec les nombres négatifs et les cas pratiques où l'arrondi supérieur est exactement ce qu'il vous faut (pagination, tarification, taille de lots).
Syntaxe
ceil(int|float $num): float$num— la valeur à arrondir. PHP accepte unintou unfloat; les chaînes numériques sont automatiquement converties.- Valeur de retour — le prochain entier supérieur, retourné sous forme de
floatet non d'int(plus de détails ci-dessous).
Exemple de base
4.2 est compris entre 4 et 5, et ceil() monte toujours vers le haut, donc le résultat est 5. Même 4.0001 est arrondi à 5. Une valeur déjà entière est retournée telle quelle.
ceil() retourne un float
Cela surprend souvent les débutants : ceil() retourne un float, même si la valeur ressemble à un entier.
<?php
$result = ceil(4.2);
echo $result; // 5 (echo hides the .0)
var_dump($result); // float(5)
echo gettype($result); // double
?>echo affiche 5 parce que PHP supprime le .0 lors de l'affichage, mais le type sous-jacent reste float. Si vous avez besoin d'un vrai int — par exemple pour utiliser la valeur comme clé de tableau ou pour satisfaire un typage strict — convertissez-la explicitement avec intval() ou (int) :
<?php
$pages = (int) ceil(95 / 10);
var_dump($pages); // int(10)
?>Comment ceil() gère les nombres négatifs
Arrondir « vers le haut » signifie se déplacer vers l'infini positif, donc pour les nombres négatifs le résultat est plus proche de zéro, et non plus éloigné.
<?php
echo ceil(-4.2); // -4 (toward zero, not -5)
echo "\n";
echo ceil(-4.8); // -4
?>-4.2 est arrondi à -4 parce que -4 est plus grand que -4.2. C'est la différence essentielle avec un simple « toujours ajouter 1 » — ceil() suit la droite numérique, pas la valeur absolue.
ceil() vs. floor() vs. round()
Ces trois fonctions réduisent toutes un nombre à une valeur entière, mais choisissent des directions différentes :
| Fonction | Direction | ceil(4.2) | floor(4.2) | round(4.2) |
|---|---|---|---|---|
ceil() | Toujours vers le haut | 5 | — | — |
floor() | Toujours vers le bas | — | 4 | — |
round() | Plus proche | — | — | 4 |
Utilisez ceil() quand « tout reste signifie une unité de plus » — floor() supprime toujours la fraction, et round() choisit l'entier le plus proche.
Cas d'utilisation pratiques
Pagination — combien de pages me faut-il ? Si vous avez 95 éléments et en affichez 10 par page, la dernière page partielle compte quand même :
<?php
$total_items = 95;
$per_page = 10;
$total_pages = ceil($total_items / $per_page);
echo $total_pages; // 10
?>95 / 10 vaut 9.5 ; floor() donnerait 9 et ferait disparaître les 5 derniers éléments, donc ceil() est le bon choix ici.
Arrondir un prix au centime supérieur ou facturer en unités entières fonctionne de la même façon — tout reste vous fait passer à l'unité suivante.
Pièges courants
- Ce n'est pas un entier. Comparez avec des nombres, pas avec des types :
ceil(4.2) === 5estfalse(float vs int), tandis queceil(4.2) == 5esttrue. Convertissez avec(int)quand vous avez besoin d'un entier. - Précision des nombres à virgule flottante. Comme
$numest unfloat, de petites erreurs de représentation peuvent parfois vous surprendre (par ex. une valeur qui « devrait » être exactement5.0étant stockée comme5.00000001). Pour les montants monétaires, préférez des centimes entiers aux dollars en virgule flottante. - Direction avec les négatifs. Rappelez-vous que
ceil(-4.5)vaut-4, pas-5.
Conclusion
ceil() arrondit un nombre vers le haut à la valeur entière la plus proche et le retourne sous forme de float. Utilisez-la dès qu'une fraction restante doit « compter comme une unité de plus » — pagination, dimensionnement de lots ou tarification. Associez-la à ses fonctions sœurs floor() et round(), et convertissez le résultat avec intval() quand vous avez réellement besoin d'un int.