¿Cómo redondear un número al 10 más cercano?
Pregunta
¿Cómo podemos redondear un número al 10 más cercano en php?
Diga que tengo 23
, ¿qué código usaría para redondearlo a 30
?
Solución
floor ()
bajará.
ceil ()
subirá.
round ()
irá a la más cercana por defecto.
Divide entre 10, haz el ceil, luego multiplica por 10 para reducir los dígitos significativos.
$number = ceil($input / 10) * 10;
Edit: Lo he estado haciendo de esta manera durante mucho tiempo ... pero la respuesta de TallGreenTree es más limpia.
Otros consejos
round($number, -1);
Esto redondeará $ 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
En realidad 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é de escribir la función, pensé que la publicaría aquí para que otros la encuentren.
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 den 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, agregue +5
a su número para redondear . Si desea redondear hacia abajo, haga -5
.
Así en el código:
round($num + 5, -1);
No puedes usar el round mode
para redondear, porque eso solo redondea las fracciones y no los números enteros.
Si desea redondear al 100
más cercano, debe usar +50
.
div por 10 luego usa ceil luego mult por 10
Probar
round (23, -1);
Podemos " engañar " via redonda 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 es compatible con " negativo " Precisión, para que puedas usarlo más fácilmente
$round = round($roundee, -1);
Edita de nuevo: si siempre quieres redondear, puedes intentarlo
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
Prueba esto:
ceil($roundee / 10) * 10;
Simplemente redondea a los 10 más cercanos y luego agrega 10.
round($num, -1) + 10
Mi primer impulso fue buscar en Google para " php math " y descubrí que hay una función de biblioteca matemática central llamada " round () " eso es probablemente lo que quieres.
Para las personas que desean hacerlo con SQL sin formato, sin usar php, java, python, etc.
SET SQL_SAFE_UPDATES = 0;
ACTUALIZAR db.table SET valor = ceil (valor / 10) * 10 donde el valor no es como '% 0';
Quería redondear al siguiente número en el lugar de los dígitos más grandes (¿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 PHP fmod . El código a continuación 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 que se redondeará y se redondeará a la décima más cercana. Espero que ayude ...
ronda ($ num, 1);