2009-10-24 16 views
68

¿Cómo podemos redondear un número al 10 más cercano en php?¿Cómo redondear un número al 10 más cercano?

Digamos que tengo 23, ¿qué código usaría para redondearlo a 30?

+44

Er, ¿ese no es el * más cercano * 10? –

+1

bien, redondee hasta 1 cifra significativa entonces! jaja – tarnfeld

+1

Para ser justos, en el título, dice "redondear * hacia arriba * un número al más cercano 10", aunque el texto dice "redondear" ... estoy bastante seguro de que él está pidiendo siempre redondear * arriba * a el * siguiente * 10. –

Respuesta

143

floor() bajará.

ceil() subirá.

round() irá al más cercano por defecto.

Divida por 10, haga el tope, luego multiplique por 10 para reducir los dígitos significativos.

$number = ceil($input/10) * 10; 

Edit: Lo he estado haciendo así durante tanto tiempo ... pero la respuesta de TallGreenTree es más clara.

+0

ceil - eso funciona: D !!! – tarnfeld

+1

La respuesta de TallGreenTree no siempre la resume. Esta respuesta es la más correcta con el uso de ceil() – Brandon

+0

La respuesta de TallGreenTree admite el redondeo hacia arriba/abajo usando el tercer parámetro (modo) de round(). round ($ input, -1, PHP_ROUND_HALF_UP) –

2

Podemos "engañar" a través redonda con

$rounded = round($roundee/10) * 10; 

También podemos evitar pasar por división de coma flotante con

function roundToTen($roundee) 
{ 
    $r = $roundee % 10; 
    return ($r <= 5) : $roundee - $r : $roundee + (10 - $r); 
} 

Editar: No lo sé (y no está bien documentado en el si te) que round ahora es compatible con la precisión "negativa", lo que puede utilizar más fácilmente

$round = round($roundee, -1); 

de nuevo Edit: Si siempre desea redondear hacia arriba, puede intentar

function roundUpToTen($roundee) 
{ 
    $r = $roundee % 10; 
    if ($r == 0) 
    return $roundee; 
    return $roundee + 10 - $r;  
} 
+0

hola, esto funciona perfectamente - para esa pregunta, ¿cómo puedo redondear? entonces 23 a 30? – tarnfeld

131
round($number, -1); 

Esta voluntad redondee $ 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

+1

redondo no es lo que quiere –

+9

¿Puedes culparlos por suponer que el interrogador quiso decir "redondea al 10 más cercano" cuando la pregunta dijo "redondea al 10 más cercano" dos veces? – ceejayoz

+0

Esta respuesta fue publicada antes de que el interrogador se aclarara a sí mismo. Solo pensé que no estaba redondeando correctamente en la pregunta. – TallGreenTree

2

Trate

round(23, -1);

0

Mi primer impulso fue el de Google de "php matemáticas" y descubrí que hay una función de biblioteca matemática núcleo llamado "round()" eso es probablemente lo que quieres

1

Prueba esto:

ceil($roundee/10) * 10; 
2
$value = 23; 
$rounded_value = $value - ($value % 10 - 10); 
//$rounded_value is now 30 
1

a la vuelta hasta el 10 próximo, y luego añadir 10.

round($num, -1) + 10 
+0

esto funcionará para el ejemplo publicado (23 a 30) pero dará como resultado que 27 se redondee a 40. – squarecandy

6

Hay muchas anwers en esta pregunta, probablemente todo voluntad darte 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 número 10. Para resolverlo, agregue +5 a su número para redondear. Si desea redondear, haga -5.

Así que en código:

round($num + 5, -1); 

no puede utilizar el round mode para el redondeo, ya que sólo repasa fracciones y no números enteros.

Si desea redondear al 100 más cercano, debe usar +50.

+0

¡Esta es la respuesta más correcta! –

9

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é escribiendo la función yo mismo, pensé que la publicaría aquí para que otros la encuentren.

La función 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>'; 

seria:

1230 
1235 
1230 
1169 
+0

Kenny, eres el mejor. Solo me gustaría tener una representación gráfica de cómo se redondea exactamente, así que estoy seguro de que da los resultados esperados en el 100% de los casos. Creo que tendré que hacer algunas pruebas. –

+0

¿Hay alguna manera de modificar este código para agregar un tercer parámetro con el modo redondo HALF_UP/HALF_DOWN? –

-1

probar este ...... pase el número que se redondeará y redondeará al décimo más cercano. Espero que sea h elps ....

round ($ num, 1);

0

Para las personas que quieren hacerlo con SQL prima, sin necesidad de utilizar PHP, Java, Python, etc. SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';

0

quería redondear al siguiente número en el lugar más grande dígitos (¿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; 
} 
Cuestiones relacionadas