Tips per i numeri

Gli argomenti di questa pagina

  • Arrotondare i numeri per eccesso o per difetto

Arrotondare i numeri per eccesso o per difetto

Per arrotondare ad un intero un numero decimale ci sono le funzioni proprie del PHP e quelle sono più che sufficienti. Ma a volte potremmo desiderare di arrotondareun numero, decimale o intero che sia, in maniera del tutto personale.
In questa pagina vedremo come arrotondare un numero al 5 o alla decina più vicina per eccesso o per difetto. Questo che segue mostra un esempio e più sotto vedremo lo stesso esempio applicato su più numeri

Osserviamo il codice mostrato qui sotto.

Innanzi tutto preciso che ho usato due volte lo stesso codice:
la prima volta per arrotondare a 5
la seconda volta per arrotondare a 10
Quindi vediamo i passi seguiti in ciascuno di questi due blocchi di codice.

Alla riga 2 abbiamo un numero da arrotondare
Alle righe 4 e 22 viene deciso il valore per l'arrotondamento da eseguire
Alle righe 5 e 23 viene calcolato il punto discriminante secondo il quale viene deviso se l'arrotondamento avviene per eccesso o per difetto
Alle righe 6 e 24 viene calcolato il MODULO (resto) tra il numero ed il valore dell'arotondamento
Dalla riga 7 alla 18 e dalla 25 alla 36 viene deciso il tipo di arrotondamento applicare al numero
Per l'arrotondamento per difetto basta togliere il resto (MODULO) al numero in esame (numero - resto)
Per l'arrotondamento per eccesso occorre aggiungere al numero in esame la differenza tra il valore dell'arrotondamento desiderato ed il resto (numero + (divisore - resto).

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
<?php
$numero 
1785546;
//    ========================================================
$divisore1 5;
$discriminante1 $divisore1 2;
$resto1 fmod($numero$divisore1);
if (
$resto1 == 0) {
    
//$azione = "no";
    
$risultato1 $numero;
} else {
    if (
$resto1 $discriminante1) {
        
//$azione = "difetto";
        
$risultato1 $numero $resto1;
    } else {
        
//$azione = "eccesso";
        
$risultato1 $numero + ($divisore1 $resto1);
    }
}
echo 
"Prova con arrotondamento a " $divisore1 "<br />\n";
echo 
$numero " => " $risultato1 "<br />\n";
//    ========================================================
$divisore2 10;
$discriminante2 $divisore2 2;
$resto2 fmod($numero$divisore2);
if (
$resto2 == 0) {
    
//$azione = "no";
    
$risultato2 $numero;
} else {
    if (
$resto2 $discriminante2) {
        
//$azione = "difetto";
        
$risultato2 $numero $resto2;
    } else {
        
//$azione = "eccesso";
        
$risultato2 $numero + ($divisore2 $resto2);
    }
}
echo 
"Prova con arrotondamento a " $divisore2 "<br />\n";
echo 
$numero " => " $risultato2 "<br />\n";
?>

 

Prova con arrotondamento a 5
1785546 => 1785545
Prova con arrotondamento a 10
1785546 => 1785550

Nelle due tabelle sottostanti ho applicato l'arrotondamento sia al 5 che al 10 e, per osservare meglio questo processo ho usato molteplici numeri con valori differenti.
Facendo refresch alla pagina i numeri verranno cambiati, perchè creati come casuali, ed ancora elaborati.

Il divisore: 5 => Il discriminante: 2.5
Numero intero Il resto con
fmod(numero, divisore)
Azione Esito
9601056 1 difetto 9601055
1618380 0 no 1618380
9288702 2 difetto 9288700
2547117 2 difetto 2547115
10359963 3 eccesso 10359965
6132528 3 eccesso 6132530
5890437 2 difetto 5890435
9102222 2 difetto 9102220
7314345 0 no 7314345
10831491 1 difetto 10831490
9300024 4 eccesso 9300025
4279050 0 no 4279050
4388607 2 difetto 4388605
1583748 3 eccesso 1583750
2750913 3 eccesso 2750915
           Il divisore: 10 => Il discriminante: 5
Numero intero Il resto con
fmod(numero, divisore)
Azione Esito
9287703 3 difetto 9287700
1680984 4 difetto 1680980
6767559 9 eccesso 6767560
4268061 1 difetto 4268060
9576081 1 difetto 9576080
7513146 6 eccesso 7513150
1981017 7 eccesso 1981020
4695966 6 eccesso 4695970
9821502 2 difetto 9821500
4376952 2 difetto 4376950
2863800 0 no 2863800
441225 5 eccesso 441230
5260068 8 eccesso 5260070
7632027 7 eccesso 7632030
3131532 2 difetto 3131530

 

 



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