Per arrotondare quindi una cifra con virgola ci viene in aiuto alcune funzioni di php utili allo scopo e sono:
- ceil()
- floor()
- round()
Sia la funzione ceil() che floor() accettano un solo parametro da processare che è appunto un numero
La funzione Ceil() prende il numero e lo arrotonda all'intero superiore al suo valore corrente, mentre floor() lo arrotonda all'intero inferiore al suo valore corrente.
Ecco un esempio:
floor() intero inferiore
echo '<br>'. floor(6.3); // 6
echo '<br>'. floor(4.999); // 4
echo '<br>'. floor(-5.999); // -6
ceil() intero superiore
echo '<br>'. ceil(6.3); // 7
echo '<br>'. ceil(4.999); // 5
echo '<br>'. ceil(-5.999); // -5
Altra funzione Php importante è round() che richiede due parametri, il numero da processare e opzionale un numero che servirà per indicare le posizioni decimali a cui arrotondare.
Se il numero in questione è esattamente a metà strada tra due interi, allora round() lo arrotonderà sempre per eccesso, vedi qui l'esempio:
echo '<br>A'. round(7.9); // 8
echo '<br>B'. round(6.5); // 7
echo '<br>C'. round(6.4999); // 6
echo '<br>D'. round(5.85744, 3); // 5.857
echo '<br>E'. round(9.85333, 4); // 9.8533
//calcolo speciale
echo '<br>F'. round(1000 / 160); // 6
echo '<br>G'.ceil(1000 / 160); // 7
Come si può vedere nella riga A viene arrotondato per eccesso a 8, mentre la riga C viene arrotondato per difetto a 6, mentre nella riga D utilizziamo il secondo parametro detto precision con il quale è possibile arrotondare ad un tot numero di decimali, pertanto la riga D si arrotonderà a ai primi 3 decimali 857 e cosi via.
Un altra situazione nella quale trovarci è quella di dover arrotondare un risultato di un nostro script per calcolare il numero dei posti a sedere nelle carrozze di un treno. In questo caso bisogna restituire il numero delle carrozze che bisogna utilizzare per portare 1000 persone dividendo per il numero dei posti a sedere 160 che arrotondato con round() ci da 6 come numero di carrozze da utilizzare.
Ma sorge un problema ed è quello che il calcolo effettivo che senza arrotondamenti darebbe come risultato 6.25, il che non può essere applicato dovendo avere necessariamente carrozze intere non a quarti o mezze, pertanto in queste situazioni bisogna individuare la soluzione migliore per rendere il nostro script finale il più funzionale possibile, quindi la soluzione migliore dovrà essere individuata non con la funzione round() ma bensì quella ceil() che arrotonderà ad una cifra superiore 7 in maniera tale da non lasciare i passeggeri a terra per mancanza di carrozze.
Un pò confuso? No dai!