Ciao a tutti
Dovrei arrotondare dei numeri decimali ma non a intero cioè mi spiego
se ho 4.2 deve darmi 4
se ho 4.9 mi deve dare 4.5
si puo dare?
Ciao a tutti
Dovrei arrotondare dei numeri decimali ma non a intero cioè mi spiego
se ho 4.2 deve darmi 4
se ho 4.9 mi deve dare 4.5
si puo dare?
Ultima modifica di techno; 22-05-2021 a 15:15
Il ragionamento del *2/2 è quello di avere alla fine lo stesso numero di partenza, ma è il floor() che fa funzionare il giochetto.
Prima di ritornare al numero di partenza col /2, il floor scarta l'eventuale decimale trasformando in intero il numero raddoppiato, questo fa si che il seguente /2 porti ad un altro numero intero se si era arrivati ad un numero pari, cosa che si verifica se il numero di partenza aveva un decimale compreso tra 0.0 e 0.4, porta invece ad un numero con decimale .5 se l'intero risultante dal floor fosse dispari, cosa che accade se il numero di partenza aveva un decimale compreso tra 0.5 e 0.9.
Da notare che usando round() al posto di floor() non si avrebbe lo stesso risultato, perché round() nei casi con decimale tra .0 e .4 si comporta come floor(), ma in quelli con decimale tra .5 e .9 incrementa di 1 il numero, portando un errore di .5, rispetto al risultato che vuoi ottenere, quando si fa /2
ottimo grazie tutto chiaro.
Ultima modifica di techno; 31-05-2021 a 16:29
Non fai *2 dentro al floor()
Codice PHP:
$calc = floor( ($voto / $total) * 2 ) / 2;