floor()
La funzione floor() in PHP arrotonda un numero verso il basso all'intero più vicino. Scopri sintassi, comportamento e casi d'uso.
La funzione floor() in PHP arrotonda un numero verso il basso all'intero più vicino — ovvero, restituisce il più grande intero che sia minore o uguale al valore fornito. "Verso il basso" qui significa sempre verso meno infinito, ed è questo il dettaglio che in molti sbagliano. Questa pagina tratta la sintassi, il comportamento di floor() con numeri positivi e negativi, il tipo restituito e quando usarla al posto di ceil(), round() o intdiv().
Sintassi
floor(int|float $num): float$num— il valore da arrotondare verso il basso. Può essere uninto unfloat.- Valore restituito — il risultato è sempre restituito come
float, anche quando rappresenta un numero intero. Quindifloor(7)restituisce7.0, non7. Se hai bisogno di un intero vero, converti il risultato:(int) floor($num).
Un esempio di base
Assegniamo un float a $number, lo passiamo a floor() e la funzione restituisce 3 — il più grande intero che non è maggiore di 3.14. Tutto ciò che segue il punto decimale viene semplicemente scartato per i numeri positivi.
Come floor() gestisce i numeri negativi
Questo è il punto che crea confusione. floor() arrotonda verso meno infinito, quindi un valore negativo viene arrotondato lontano dallo zero, non verso di esso.
<?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)
?>Per -4.7, gli interi al di sotto di esso sono -5, -6, ...; il più grande di questi è -5. Se vuoi -4 (arrotondamento verso zero), dovresti usare ceil() o una conversione come (int) -4.7.
floor() vs. ceil() vs. round()
Queste tre funzioni restituiscono tutte numeri interi ma differiscono nella direzione:
| Funzione | Direzione | floor(2.5) / ceil(2.5) / round(2.5) |
|---|---|---|
floor() | Sempre verso il basso (verso −∞) | 2.0 |
ceil() | Sempre verso l'alto (verso +∞) | 3.0 |
round() | Al più vicino, i mezzi arrotondano verso l'alto per default | 3.0 |
<?php
echo floor(2.5); // 2
echo "\n";
echo ceil(2.5); // 3
echo "\n";
echo round(2.5); // 3
?>Quando usare floor()?
floor() è utile ogni volta che hai bisogno di un conteggio intero che non deve mai eccedere:
- Paginazione — numero di pagine complete:
floor($totalItems / $perPage). - Tempo/unità — ore intere dai minuti:
floor($minutes / 60). - Denaro/quantità — quanti articoli interi rientrano in un budget:
floor($budget / $price).
<?php
$totalItems = 47;
$perPage = 10;
$fullPages = floor($totalItems / $perPage);
echo "Full pages: " . $fullPages; // Full pages: 4
?>Nota: Per la divisione intera puoi anche usare
intdiv(), che restituisce un verointed è più chiaro quando entrambi gli operandi sono interi. Usafloor()quando sono coinvolti i float.
Conclusione
floor() arrotonda sempre verso meno infinito e restituisce un float. Tieni presente che i numeri negativi vengono arrotondati lontano dallo zero, e converti in (int) se hai bisogno di un tipo intero. Per la direzione opposta usa ceil(), per l'arrotondamento al valore più vicino usa round(), e per formattare i numeri con separatori delle migliaia vedi number_format().