Foros del Web » Programando para Internet » PHP »

Redondear LOS decimales

Estas en el tema de Redondear LOS decimales en el foro de PHP en Foros del Web. No se si es posible lo que quiero hacer, pero por las dudas lo consulto. Las funciones round, ceil, floor, number_format no hacen lo que ...
  #1 (permalink)  
Antiguo 21/06/2010, 22:37
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Redondear LOS decimales

No se si es posible lo que quiero hacer, pero por las dudas lo consulto.
Las funciones round, ceil, floor, number_format no hacen lo que quiero que es lo siguiente...

Tengo un precio de 124,22 y lo que necesito es redondear las decimales en alza en 5
o sea deberia quedar 124,25

otro ejemplo por si no se entendio
tengo 48,02 y necesito que quede en 48,05

es posible hacer esto con PHP?
  #2 (permalink)  
Antiguo 21/06/2010, 22:52
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Redondear LOS decimales

una funcion nativa de php no la se
pero creo que puedes crear tu propia funcion

Código PHP:
Ver original
  1. <?php
  2. function alza5($numero, $separa = "."){
  3.     if(strpos($numero, $separa) === false) return $numero;
  4.     else{
  5.         $ultimaCifra = substr($numero, strlen($numero) - 1, strlen($numero));
  6.         return ($ultimaCifra < 5) ? substr($numero, 0, strlen($numero) - 1) . "5" : $numero;
  7.     }
  8. }
  9. $numero = "124.22";
  10. $nuevo_numero = alza5($numero);
  11. ?>

Suerte
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #3 (permalink)  
Antiguo 21/06/2010, 23:00
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Redondear LOS decimales

Cita:
Iniciado por masterojitos Ver Mensaje
una funcion nativa de php no la se
pero creo que puedes crear tu propia funcion

Código PHP:
Ver original
  1. <?php
  2. function alza5($numero, $separa = "."){
  3.     if(strpos($numero, $separa) === false) return $numero;
  4.     else{
  5.         $ultimaCifra = substr($numero, strlen($numero) - 1, strlen($numero));
  6.         return ($ultimaCifra < 5) ? substr($numero, 0, strlen($numero) - 1) . "5" : $numero;
  7.     }
  8. }
  9. $numero = "124.22";
  10. $nuevo_numero = alza5($numero);
  11. ?>

Suerte
GENIO!!! gracias che increible funciona perfecto y no tengo idea como jaj ya me voy a poner a revisarla.. gracias!!

Edit

Ya entendi lo que hace es simplemente reemplazar el ultimo digito, no es necesario hacer ningun calculo matematico como no se me habia ocurrido!!! jaj muy bueno... de paso lo modifique y le agregue $ultimaCifra < 5 && $ultimaCifra > 0 en el caso de que sea 0.50 no lo redondee en 0.55

Última edición por Reenokazar; 21/06/2010 a las 23:09
  #4 (permalink)  
Antiguo 21/06/2010, 23:08
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Redondear LOS decimales

una inspeccion sencilla....

Código PHP:
Ver original
  1. <?php
  2. function alza5($numero, $separa = "."){ //parametros numero y separacion (puede ser ",")
  3.     if(strpos($numero, $separa) === false) return $numero; //si es un numero entero retorno el mismo numero
  4.     else{ //si es decimal
  5.         //obtengo la ultima cifra a redondear a 5
  6.         $ultimaCifra = substr($numero, strlen($numero) - 1, strlen($numero));
  7.         //si es menor que 5, le quito la ultima cifra y le pongo 5, caso contrario regreso el mismo numero
  8.         return ($ultimaCifra < 5) ? substr($numero, 0, strlen($numero) - 1) . "5" : $numero;
  9.     }
  10. }
  11.  
  12. //ejemplos
  13. $numero = "124.22";
  14. $nuevo_numero = alza5($numero);
  15. echo "ALZANDO A 5<br />antiguo numero: $numero - nuevo numero: $nuevo_numero<br /><br />";
  16.  
  17. $numero = "124";
  18. $nuevo_numero = alza5($numero);
  19. echo "NUMERO ENTERO<br />antiguo numero: $numero - nuevo numero: $nuevo_numero<br /><br />";
  20.  
  21. $numero = "124,08";
  22. $nuevo_numero = alza5($numero, ",");
  23. echo "EJEMPLO CON SEPARACION \",\"<br />antiguo numero: $numero - nuevo numero: $nuevo_numero<br /><br />";
  24. ?>

P.D. la funcion pudo aver sido planteanda de diferentes formas... lo hize al paso ^^

Bueno ahora si me retiro, que ya tengo sueño ^^

Dios Bendiga a Todos.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #5 (permalink)  
Antiguo 21/06/2010, 23:11
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Redondear LOS decimales

No es algo muy limpio pero al menos te servira para numeros con decimales menores a 3 digitos
Código PHP:
function redondear($num){
    
$temp explode('.',$num);
    
$exd intval($temp[1]);
    if(
$exd<10){
        
$dos = (5-$exd)+($exd);
        
$fin ".0".$dos;
    }elseif(
$exd<100){
        
$tp round($exd/10);
        
$dos = (5-($tp-$exd))+($tp-$exd);
        
$fin ".".$tp.$dos;
    }
    return 
$temp[0].$fin;
}

$num 48.02;
echo 
redondear($num);
echo 
'<br>';
$num 124.22;
echo 
redondear($num); 
Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 21/06/2010, 23:13
 
Fecha de Ingreso: julio-2009
Mensajes: 8
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Redondear LOS decimales

Muy bueno muchas gracias a los dos!!
  #7 (permalink)  
Antiguo 21/06/2010, 23:25
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Redondear LOS decimales

Marvin pero en tu funcion para empezar solo separa por ".", y si tiene una "," ???

ah verdad, (5-$exd)+($exd) no es igual ah 5 SIEMPRE ??
por que hacer esa operacion.... ??

y por ultimo, complicas mucha la situacion y como dices si es mayor a 100, cae la funcion....

En fin... Suerte para Todos ^^
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #8 (permalink)  
Antiguo 21/06/2010, 23:52
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 2 meses
Puntos: 81
Respuesta: Redondear LOS decimales

No pretendo armar un problema a partir de una solucion... la idea es entregar distintas versiones de lo que puede servir para llevar a cabo lo que se necesita.

Parto destacando en todo caso q no es lo mas limpio dado que me gusta explicar y no entregar las funciones hechas para que puedan explorarlas y optimizarlas.

De todas maneras y teniendo todo esto en cuenta, utilice solo funciones numericas exceptuando la separacion de caracteres... y para contestar a tus preguntas:
Cita:
Iniciado por masterojitos
Marvin pero en tu funcion para empezar solo separa por ".", y si tiene una "," ???
Asi es... , y es cosa de agregarle al principio de la funcion
Código PHP:
$num str_replace(array(",","."),".",$num); 
y quedamos no?
Cita:
Iniciado por masterojitos
ah verdad, (5-$exd)+($exd) no es igual ah 5 SIEMPRE ??
por que hacer esa operacion.... ??
Entonces te queda claro que $dos puedes reemplazarlo por 5 y que en la funcion solo es cosa de concatenarlo?... si contestas esta pregunta esta claro porque hacer esa operacion entonces, no?
Cita:
Iniciado por masterojitos
y por ultimo, complicas mucha la situacion y como dices si es mayor a 100, cae la funcion....
Cita:
Iniciado por Marvin
[...] pero al menos te servira para numeros con decimales menores a 3 digitos
Dije que hacia otra cosa??

Sorry por desvirtuar el tema, pero la idea de todo este espacio es que logremos compartir distintas soluciones a un mismo tema, y cada uno hace lo que cree es mejor para nuestros compañeros programadores. Si a ti te agrada dar las soluciones listas sin explicacion o sin posibilidades de optimizarla, perfecto, pero en mi caso, prefiero ayudar dando poco a poco la solucion o al menos comentando cada trozo de codigo que entrego para que antes de usarlo, comprendan porque lo hacen.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #9 (permalink)  
Antiguo 22/06/2010, 08:26
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 9 meses
Puntos: 105
Respuesta: Redondear LOS decimales

Cita:
Iniciado por Marvin Ver Mensaje
Si a ti te agrada dar las soluciones listas sin explicacion o sin posibilidades de optimizarla, perfecto, pero en mi caso, prefiero ayudar dando poco a poco la solucion o al menos comentando cada trozo de codigo que entrego para que antes de usarlo, comprendan porque lo hacen.
Esa fue la parte que no entiendo

Yo entiendo a cualquiera y le doy la razon, justo como dije... que hay varias formas de hacer una solucion, pero el hecho es darle a un usuario codigos sencillos y no tan enredosos...

El hecho de que en tu funcion solo acepte "." o que solo menores de 100.... PERFECTO!!, el usuario debe adaptarlo y hacerlo mas general...

Sin embargo, lo que si me sorprendio fue lo de la operacion de sumandos.....
Osea que si yo quiero poner una variable $valor = 1; tu prefieres poner $valor = pow(((105 * 2) / 45), 0); por que tambien resulta 1 ?? y el usuario debe darse cuenta y hacerlo mejor ??

Se que nos vamos del tema.... pero el usuario ya consiguio si solucion y yo me quede con esa duda de la forma en que diste tu solucion

Dios Bendiga a Todos
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #10 (permalink)  
Antiguo 22/06/2010, 08:36
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Redondear LOS decimales

Cita:
Yo entiendo a cualquiera y le doy la razon, justo como dije... que hay varias formas de hacer una solucion, pero el hecho es darle a un usuario codigos sencillos y no tan enredosos...
en realidad hay que darles la orientación y un par de consejos.. no hacerles el trabajo por que de igual manera no van a entender nada si nunca lo hacen por ellos mismos.

por lo demás creo que la función de @Marvin no tiene nada de complicada como dices tu.. es solo otra forma de resolver el mismo problema...
__________________
More about me...
~ @rhyudek1
~ Github

Etiquetas: Ninguno
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 05:48.