Arrotondamento dei numeri

Gli argomenti di questa pagina

  • Le funzioni ceil(), floor(), round(), intval(), abs()

Spesso, quando nei nostri script PHP abbiamo a che fare coi numeri dobbiamo decidere se arrotondare o meno numeri decimali e, se il caso, il tipo di arrotondamento da adottare. Prendiamo questo esempio

I decimali potrebbero essere, in alcuni casi, indesiderati. Potremmo decidere di togliere semplicemente i decimali oppure decidere di eseguire un arrotondamento su tale numero.
Il PHP ci mette a disposizione alcune funzioni di restituirci il solo intero di un numero decimale. Tuttavia non sono tutte uguali:
troviamo funzioni che arrotondano per eccesso
altre funzioni che arrotondano per difetto
qualcuna che arrotonda all'intero più vicino
qualcuna che elimina semplicemente i decimali
L'ultima funzione non arrotonda il numero, ma l'ho inserito in questo contesto perchè restituisce un numero senza indicare se positivo o negativo. Questa cosa può a volte essere utili per eseguire dei calcoli a prescindere dal segno.
Sta a noi decidere quale usare.

Le funzioni ceil(), floor(), round(), intval(), abs()

Le funzioni da usare per questo scopo sono:

  • ceil(): restituisce il valore arrotondato al successivo numero intero più alto se necessario.
  • floor(): restituisce il valore arrotondato al successivo numero intero più basso se necessario.
  • round(): arrotonda un numero al numero intero più vicino. La funzione accetta anche un secondo parametro opzionale per indicare il numero di cifre desiderato dopo la virgola (0 è il parametro di default)
  • intval(): Restituisce il valore intero utilizzando la base specificata per la conversione (il default è in base 10).
  • abs(): Restituisce il valore assoluto del numero senza indicare se si tratta di numero positivo o negativo. Se un numero è un decimale viene restituito un decimale, altrimenti un intero.

Le sintassi da usare per queste funzioni sono visibili nel codice qui sotto, che ho ridotto al minimo. Ho usato le funzioni qui sopra elencate.

1
2
3
4
5
6
7
<?php
echo ceil($num) . "<br />\n";
echo 
floor($num) . "<br />\n";
echo 
round($num,[$prec]) . "<br />\n";        //    argomento $prec facoltativo
echo intval($num) . "<br />\n";
echo 
abs($num) . "<br />");
?>

Qui di seguito è invece visibile un esempio pratico di cui mostro il codice e poi la sua esecuzione.
Per questo test uso una matrice di numeri e pseudo numeri.

Nel codice che segue ho riunito tutte le funzioni per due motivi:
Il loro uso è semplicissimo e non richiede particolari accorgimenti
Visualizzando queste funzioni in unico riquadro, se ne può meglio notare le differenze dei valori restituiti.
  • Alle prime righe, fino alla riga 14 uso numeri decimali
  • Alla riga 15 ho messo un numero intero
  • Alla riga 16 ho messo un numero decimale come stringa (racchiuso tra doppi apici)
  • Alle righe 17 e 18 ho messo dei numeri decimali preceduti e seguiti da caratteri alfabetici
  • Dalla riga 31 inizio l'output usando le funzioni per l'arrotondamento dei numeri, ma nella prima riga visualizzo il numero che si sta processando per poi applicare allo stesso le varie funzioni trattate in questa pagina.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$valori 
= array (
63.53342402,
63.48956246,
38.7747401,
38.46072359,
69.7090379,
69.4140327,
72.79048002,
72.36195316,
73.56401868,
73.05623686,
-
23.76711166,
-
23.29245825,
64,
"48.29816544",
"test57.64782119",
"36.27934206test"
);
echo 
"<table class=\"tabella_it\">\n";
echo 
"<tr>\n";
echo 
"<th>Num</th>\n";
echo 
"<th>ceil(\$numeo)</th>\n";
echo 
"<th>floor(\$numeo)</th>\n";
echo 
"<th>round(\$numeo)</th>\n";
echo 
"<th>round(\$numeo,\$prec)</th>\n";
echo 
"<th>intval(\$numeo)</th>\n";
echo 
"<th>abs(\$numeo)</th>\n";
echo 
"</tr>\n";
for (
$i 0$i count ($valori); $i++) {
    echo 
"<tr>\n";
    echo 
"<td>".$valori[$i]."</td>\n";
    echo 
"<td>".ceil($valori[$i])."</td>\n";
    echo 
"<td>".floor($valori[$i])."</td>\n";
    echo 
"<td>".round($valori[$i])."</td>\n";
    echo 
"<td>".round($valori[$i],2)."</td>\n";
    echo 
"<td>".intval($valori[$i])."</td>\n";
    echo 
"<td>".abs($valori[$i])."</td>\n";
    echo 
"</tr>\n";
}
echo 
"</table>\n";
?>

Per avere con un veloce colpo d'occhio le varie differenze tra una funzione ed un'altra intabello tutto quanto.

Num ceil($numeo) floor($numeo) round($numeo) round($numeo,$prec) intval($numeo) abs($numeo)
63.53342402 64 63 64 63.53 63 63.53342402
63.48956246 64 63 63 63.49 63 63.48956246
38.7747401 39 38 39 38.77 38 38.7747401
38.46072359 39 38 38 38.46 38 38.46072359
69.7090379 70 69 70 69.71 69 69.7090379
69.4140327 70 69 69 69.41 69 69.4140327
72.79048002 73 72 73 72.79 72 72.79048002
72.36195316 73 72 72 72.36 72 72.36195316
73.56401868 74 73 74 73.56 73 73.56401868
73.05623686 74 73 73 73.06 73 73.05623686
-23.76711166 -23 -24 -24 -23.77 -23 23.76711166
-23.29245825 -23 -24 -23 -23.29 -23 23.29245825
64 64 64 64 64 64 64
48.29816544 49 48 48 48.3 48 48.29816544
test57.64782119 0 0 0 0 0 0
36.27934206test 37 36 36 36.28 36 36.27934206

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum