Foros del Web » Programando para Internet » PHP »

Redondear de 10 en 10

Estas en el tema de Redondear de 10 en 10 en el foro de PHP en Foros del Web. Hola a todos! Vereis yo obtengo un valor numerico de un formulario,la cuestion es que necesito que ese valor se redondee de esta manera: si ...
  #1 (permalink)  
Antiguo 09/02/2009, 04:47
 
Fecha de Ingreso: marzo-2007
Mensajes: 83
Antigüedad: 12 años, 11 meses
Puntos: 0
Redondear de 10 en 10

Hola a todos!

Vereis yo obtengo un valor numerico de un formulario,la cuestion es que necesito que ese valor se redondee de esta manera:

si el numero esta entre 100 y 110, que se iguale a 110
si el numero esta entre 110 y 120, que se iguale a 120
... y asi sucesivamente.

Hay alguna manera de redondearlo al alza sin tener que hacer infinidad de ifs...?

Gracias!
  #2 (permalink)  
Antiguo 09/02/2009, 05:07
Avatar de AnisDelMono  
Fecha de Ingreso: febrero-2007
Ubicación: Pas de la Casa
Mensajes: 247
Antigüedad: 13 años
Puntos: 7
Respuesta: Redondear de 10 en 10

Creo que se consigue con la funcion round()

round(108, 2) daria como resultado 110

Mirate el manual:

es.php.net/manual/es/function.round.php
  #3 (permalink)  
Antiguo 09/02/2009, 08:11
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 14 años, 10 meses
Puntos: 9
Respuesta: Redondear de 10 en 10

La función techo (ceil) es la que hace eso.
__________________
Add, never Remove
  #4 (permalink)  
Antiguo 09/02/2009, 15:25
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Redondear de 10 en 10

De hecho ceil() redondea al entero inmediato superior, y round() lo hace al superior o inferior que esté más cercano. Si bien es cierto que con round() podemos definir un segundo parámetro de precisión que puede ser negativo y así redondear a decenas, centenas, etc., no podemos controlar que lo haga para arriba o para abajo. ceil() no tiene un parámetro de precisión.

Para lograr lo que deseas se me ocurren varias formas:

Primera, redondear usando round() y pasando como segundo parámetro -1. Si el número resultante fuese menor, entonces le sumamos 10.

Código PHP:
function redondear_a_10($valor) {

    
// Convertimos $valor a entero
    
$valor intval($valor);

    
// Redondeamos al múltiplo de 10 más cercano
    
$n round($valor, -1);

    
// Si el resultado $n es menor, quiere decir que redondeo hacia abajo
    // por lo tanto sumamos 10. Si no, lo devolvemos así.
    
return $n $valor $n 10 $n;
}

echo 
redondear_a_10(14); // 20
echo redondear_a_10(50); // 50
echo redondear_a_10(-98); // -90 
Otra forma sería usando ceil() y un pequeño truco:
Código PHP:
function redondear_a_10($valor) {

    
// Convertimos $valor a entero
    
$valor intval($valor);

    
// El truco que aplicamos consiste en dividir el entero entre 10
    // de manera que obtendremos un número con un decimal.
    // Eso sí puede ser redondeado hacia arriba con ceil().
    // Finalmente multiplicamos por 10 para restaurar el formato
    // original del número
    
return ceil($valor/10)*10;
}

echo 
redondear_a_10(14); // 20
echo redondear_a_10(50); // 50
echo redondear_a_10(-98); // -90 
Otra solución es calcular el residuo de dividir el número entre 10, y conociendo eso completar hasta el siguiente 10:
Código PHP:
function redondear_a_10($valor) {
 
     
// Convertimos $valor a entero
    
$valor intval($valor);

    
// Si es un múltiplo de 10 exacto, no hacemos nada.
    
if($valor 10 == 0) return $valor;

    
// A $valor le sumamos lo que le falta para llegar al múltiplo 
    // de 10 siguiente
    
return $valor + (10 - ($valor 10));
}
 
echo 
redondear_a_10(14); // 20
echo redondear_a_10(50); // 50
echo redondear_a_10(-98); // -80 !? 
Esta última forma tiene un problema si se trata de números negativos. Si lo estudias te darás cuenta por qué.

Espero que no copies/pegues estas funciones sin mirarlas antes. Escribí este mensaje tan amplio para que sirva de referencia posterior.


Última edición por okram; 09/02/2009 a las 15:34 Razón: Maldito BBCode
  #5 (permalink)  
Antiguo 10/02/2009, 03:09
Avatar de AnisDelMono  
Fecha de Ingreso: febrero-2007
Ubicación: Pas de la Casa
Mensajes: 247
Antigüedad: 13 años
Puntos: 7
Respuesta: Redondear de 10 en 10

Gracias okram. Yo si me las he mirado. El truco de la segunda funcion es genial
  #6 (permalink)  
Antiguo 11/04/2015, 12:48
lucasabogado
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Redondear de 10 en 10

Hola en vez de
echo redondear_a_10(14);

como lo puedo pasar a una variable?
  #7 (permalink)  
Antiguo 11/04/2015, 23:04
Avatar de NueveReinas  
Fecha de Ingreso: septiembre-2013
Ubicación: No tan Buenos Aires
Mensajes: 1.101
Antigüedad: 6 años, 5 meses
Puntos: 145
Respuesta: Redondear de 10 en 10

Cita:
Iniciado por lucasabogado Ver Mensaje
Hola en vez de
echo redondear_a_10(14);

como lo puedo pasar a una variable?
Código PHP:
Ver original
  1. $nombredelavariable = redondear_a_10(14);

__________________
¿Te sirvió la respuesta? Deja un +1
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:37.