¿Cómo podemos redondear un número a la decena más cercana en php?
Digamos que sí 23
, ¿qué código usaría para redondearlo 30
?
¿Cómo podemos redondear un número a la decena más cercana en php?
Digamos que sí 23
, ¿qué código usaría para redondearlo 30
?
Respuestas:
floor()
bajará.
ceil()
subirá.
round()
irá al más cercano por defecto.
Dividir por 10, hacer el techo y luego multiplicar por 10 para reducir los dígitos significativos.
$number = ceil($input / 10) * 10;
Editar: Lo he estado haciendo de esta manera durante tanto tiempo ... pero la respuesta de TallGreenTree es más limpia.
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
Esto redondeará el número $ al 10 más cercano. También puede pasar una tercera variable si es necesario para cambiar el modo de redondeo.
Más información aquí: http://php.net/manual/en/function.round.php
23
será 20
y no 30
porque siempre se redondeará a la decena más cercana. El modo de redondeo no ayudará, ya que esta sólo la mitad redonda, después de la x.
.
De hecho, estaba buscando una función que pudiera redondear a la variable más cercana y esta página seguía apareciendo en mis búsquedas. Entonces, cuando finalmente terminé escribiendo la función yo mismo, pensé en publicarla aquí para que otros la encontraran.
La función se redondeará a la variable más cercana:
function roundToTheNearestAnything($value, $roundTo)
{
$mod = $value%$roundTo;
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}
Este código:
echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';
Saldrá:
1230
1235
1230
1169
Hay muchas respuestas en esta pregunta, probablemente todas te darán la respuesta que estás buscando. Pero como menciona @TallGreenTree, hay una función para esto.
Pero el problema de la respuesta de @TallGreenTree es que no se redondea, se redondea al 10 más cercano. Para resolver esto, sume +5
a su número para redondear. Si desea redondear hacia abajo, hágalo -5
.
Entonces en código:
round($num + 5, -1);
No se puede usar round mode
para redondear, porque eso solo redondea fracciones y no números enteros.
Si desea redondear al más cercano 100
, debe usar +50
.
div por 10 luego use ceil luego multiplique por 10
Tratar
round(23, -1);
Podemos "hacer trampa" mediante una ronda con
$rounded = round($roundee / 10) * 10;
También podemos evitar pasar por la división de punto flotante con
function roundToTen($roundee)
{
$r = $roundee % 10;
return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}
Editar: no sabía (y no está bien documentado en el sitio) que round
ahora admite precisión "negativa", por lo que puede usar más fácilmente
$round = round($roundee, -1);
Editar de nuevo: si siempre desea redondear, puede intentar
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
Quería redondear al siguiente número en el lugar de dígitos más grande (¿hay un nombre para eso?), Así que hice la siguiente función (en php):
//Get the max value to use in a graph scale axis,
//given the max value in the graph
function getMaxScale($maxVal) {
$maxInt = ceil($maxVal);
$numDigits = strlen((string)$maxInt)-1; //this makes 2150->3000 instead of 10000
$dividend = pow(10,$numDigits);
$maxScale= ceil($maxInt/ $dividend) * $dividend;
return $maxScale;
}
Hey i modify Kenny answer and custom it not always round function now it can be ceil and floor function
function roundToTheNearestAnything($value, $roundTo,$type='round')
{
$mod = $value%$roundTo;
if($type=='round'){
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}elseif($type=='floor'){
return $value+($mod<($roundTo/2)?-$mod:-$mod);
}elseif($type=='ceil'){
return $value+($mod<($roundTo/2)?$roundTo-$mod:$roundTo-$mod);
}
}
echo roundToTheNearestAnything(1872,25,'floor'); // 1850<br>
echo roundToTheNearestAnything(1872,25,'ceil'); // 1875<br>
echo roundToTheNearestAnything(1872,25,'round'); // 1875
Esto se puede lograr fácilmente usando la función ' fmod ' de PHP . El código siguiente es específico de 10, pero puede cambiarlo a cualquier número.
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
SALIDA: 100
Intente esto ... pase el número a redondear y se redondeará a la décima más cercana. Espero que ayude ...
round ($ num, 1);