sirve - php tutorial
Redondea ABAJO al entero medio más cercano en PHP (5)
De los requisitos de mi trabajo. Puse una función para hacer esto. Espero que puedas verlo como referencia:
function round_half_five($no) {
$no = strval($no);
$no = explode(''.'', $no);
$decimal = floatval(''0.''.substr($no[1],0,2)); // cut only 2 number
if($decimal > 0) {
if($decimal <= 0.5) {
return floatval($no[0]) + 0.5;
} elseif($decimal > 0.5 && $decimal <= 0.99) {
return floatval($no[0]) + 1;
}
} else {
return floatval($no);
}
}
Necesito una función de PHP que tome un flotador y la reduzca a la mitad más cercana (x.0 o x.5). Encontré otras funciones que redondearán a la fracción más cercana, pero giran en ambos sentidos.
La función que necesito solo puede redondear.
Ejemplos
7.778 -> 7.5
7.501 -> 7.5
7.49 -> 7.0
7.1 -> 7.0
Supongo que PHP tiene una función de piso: floor($num * 2) / 2
debería hacerlo.
Una solución fácil es utilizar el operador de módulo (función fmod()
), como esto:
function roundDown($number, $nearest){
return $number - fmod($number, $nearest);
}
var_dump(roundDown(7.778, 0.5));
var_dump(roundDown(7.501, 0.5));
var_dump(roundDown(7.49, 0.5));
var_dump(roundDown(7.1, 0.5));
Y el resultado:
La ventaja es que funciona con cualquier número más cercano (0.75, 22.5, 3.14 ...)
Puede usar el mismo operador para redondear:
function roundUp($number, $nearest){
return $number + ($nearest - fmod($number, $nearest));
}
var_dump(roundUp(7.778, 0.5));
var_dump(roundUp(7.501, 0.5));
var_dump(roundUp(7.49, 0.5));
var_dump(roundUp(7.1, 0.5));
$x = floor($x * 2) / 2;
echo round($val*2) / 2; // Done