W3docs

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 un int o un float.
  • Valore restituito — il risultato è sempre restituito come float, anche quando rappresenta un numero intero. Quindi floor(7) restituisce 7.0, non 7. Se hai bisogno di un intero vero, converti il risultato: (int) floor($num).

Un esempio di base

php— editable, runs on the server

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:

FunzioneDirezionefloor(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 default3.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 vero int ed è più chiaro quando entrambi gli operandi sono interi. Usa floor() 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().

Esercitazione

Pratica
Cosa fa la funzione floor() in PHP?
Cosa fa la funzione floor() in PHP?
Was this page helpful?