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 |
|
|
|