2009-04-28 22 views
6

Estoy creando este sistema de clasificación usando estrellas de 5 bordes. Y quiero que el encabezado incluya la calificación promedio. Así que he creado estrellas que muestran 1/5ths. El uso de "1.2" voy a conseguir una estrella completa y un punto en la próxima estrella y así sucesivamente ...número redondo al más cercano 0.2 con PHP

pero no he encontrado una buena manera de redondear al más cercano 0.2 ... Supuse Podría multiplicar por 10, luego por la ronda de, y luego ejecutar un cambio a la ronda 1 hasta 2, 3 hasta 4 y así sucesivamente. Pero eso parece tedioso e innecesario ...

Respuesta

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

¡increíble! Sabía que tenía que haber una solución fácil para esto. Gracias ( – peirix

+0

¡una solución brillante! – alumi

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

Así que el total es 25, ¿sería posible no utilizar flotadores y utilizar 1-> 25/25? De esta manera hay menos cálculos necesarios ... (si alguna)

+0

+1 - ese es un buen punto, pero asumo que el puntaje de 1.2 o 1.17 o lo que sea es en realidad un promedio, por lo que habrá fracciones involucradas en algún momento de todos modos – nickf

18

Una solución flexible

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, pero te falta algo de "$". –

+0

Bien, pero como sé que siempre voy a necesitar una fracción de 5, realmente no tiene sentido crear una función general para ello. Pero lo defiendo. tenga esto en cuenta. Gracias (: – peirix

+0

¡Obtendrá errores de coma flotante con esta solución! –

1

¿Por qué todos dando soluciones que requieren una inspección o una conversión más profunda? ¿Quieres 0.2? Entonces:

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

Quieres 5? Entonces:

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

Es así de simple.

+0

¡Debido a que obtendrá errores de coma flotante con esta solución! –

Cuestiones relacionadas