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
10103886 1 difetto 10103885
10786203 3 eccesso 10786205
6832161 1 difetto 6832160
6351975 0 no 6351975
5588739 4 eccesso 5588740
456543 3 eccesso 456545
4199130 0 no 4199130
3989673 3 eccesso 3989675
5838156 1 difetto 5838155
377289 4 eccesso 377290
2814183 3 eccesso 2814185
3995334 4 eccesso 3995335
9164493 3 eccesso 9164495
5804523 3 eccesso 5804525
4456872 2 difetto 4456870
           Il divisore: 10 => Il discriminante: 5
Numero intero Il resto con
fmod(numero, divisore)
Azione Esito
2035296 6 eccesso 2035300
3166830 0 no 3166830
10008981 1 difetto 10008980
9675648 8 eccesso 9675650
1711953 3 difetto 1711950
809856 6 eccesso 809860
10138518 8 eccesso 10138520
2874123 3 difetto 2874120
7606053 3 difetto 7606050
10850805 5 eccesso 10850810
2809854 4 difetto 2809850
8506152 2 difetto 8506150
8838153 3 difetto 8838150
3582081 1 difetto 3582080
9093897 7 eccesso 9093900

 

 



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