2009-04-28 14 views
6

Sto creando questo sistema di valutazione utilizzando stelle a 5 bordi. E voglio che l'intestazione includa il rating medio. Quindi ho creato stelle che mostrano 1/5. Usando "1.2" otterrò una stella completa e un punto sulla stella successiva e così via ...numero arrotondato al 0,2 vicino con PHP

Ma non ho trovato un buon modo per arrotondare al più vicino .2 ... Ho pensato Potrei moltiplicare per 10, quindi arrotondare, e quindi eseguire un passaggio per arrotondare 1 fino a 2, 3 fino a 4 e così via. Ma che sembra noioso e inutile ...

risposta

27
round(3.78 * 5)/5 = 3.8 
+0

fantastico! Sapevo che ci doveva essere una soluzione facile a questo. Grazie (: – peirix

+0

una soluzione geniale! Grazie! – alumi

4
function round2($original) { 
    $times5 = $original * 5; 
    return round($times5)/5; 
} 
3

Così il vostro totale è di 25, sarebbe possibile non usare carri e utilizzare 1-> 25/25? In questo modo c'è meno calcoli necessari ... (se non del tutto)

+0

+1 - questo è un buon punto, ma presumo che il punteggio di 1,2 o 1,17 o qualunque sia in realtà una media, quindi ci saranno comunque frazioni coinvolte in qualche punto – nickf

18

Una soluzione flessibile

function roundToNearestFraction($number, $fractionAsDecimal) 
{ 
    $factor = 1/$fractionAsDecimal; 
    return round($number * $factor)/$factor; 
} 

// Round to nearest fifth 
echo roundToNearestFraction(3.78, 1/5); 

// Round to nearest third 
echo roundToNearestFraction(3.78, 1/3); 
+0

Elegante, ma ti manca qualche "$". –

+0

Bello, ma dato che so che avrò sempre bisogno di una frazione di 5, non ha davvero senso creare una funzione generale per questo. Tieni questo a mente Grazie (: – peirix

+0

Otterrai errori in virgola mobile con questa soluzione! –

1

Perché tutti dando soluzioni che richiedono un controllo più profondo o la conversione? Vuoi 0.2? Quindi:

round($n/0.2) * 0.2; // $n = 3.78/0.2 = 18.9 (=) 19 * 0.2 = 3.8 // 

Vuoi 5? Poi:

round($n/5) * 5; // $n = 17/5 = 3.4 (=) 3 * 5 = 15 // 

E 'così semplice come sembra.

+0

Perché otterrai errori in virgola mobile con questa soluzione! –

Problemi correlati