Foros del Web » Programando para Internet » PHP »

Error raro con float y bucle while

Estas en el tema de Error raro con float y bucle while en el foro de PHP en Foros del Web. Buenas pues tengo un problema algo raro con un bucle while y un float o en este caso mas que un float es un double ...
  #1 (permalink)  
Antiguo 27/09/2012, 09:31
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 16 años, 5 meses
Puntos: 0
Error raro con float y bucle while

Buenas pues tengo un problema algo raro con un bucle while y un float o en este caso mas que un float es un double que dependiendo del valor que tome lo hace bien o no. Me explico

Tengo un presupuesto que siempre de mínimo tiene que haber 0.5, por lo que en el ejemplo tomaré que presupuesto vale 0.6 y que por tanto puedo usar hasta un máximo de 0.1

Pues bien:
Código PHP:
Ver original
  1. $presupuestototal=0.6; //Variable que nos dirá el presupuesto total


Averiguamos el total que se podría usar
Código PHP:
Ver original
  1. $cantidad_maxima = $presupuestototal-0.5;

Creamos una variable que nos sirva para luego en el bucle ir sumando y la convertimos en double
Código PHP:
Ver original
  1. $cantidadsumatoria=0;
  2. settype($cantidadsumatoria,"double");

Ahora recorremos el bucle
Código PHP:
Ver original
  1. while ($cantidadsumatoria<=$cantidad_maxima)
  2. {
  3.    echo $cantidadsumatoria;
  4.    $cantidadsumatoria+=0.1;
  5. }//fin while

Pues bien este bucle tan sencillo, que supuestamente debe imprimir la variable cantidadsumatoria tantas veces como sea menor igual a la cantidad máxima, lo imprime siempre que la cantidad máxima sea mayor que 0.2, es decir de 0.3 en adelante, si es menor solo imprime el primer valor que es cero.
Sin embargo como digo si se cambia el presupuesto y se pone una cantidad mayor, no hay problema y lo imprime siempre.

¿Que hago mal? Se que tiene que ser algo muy tonto pero no me doy cuenta la verdad
Incluso como veis he pasado el valor entero a double por si acaso, pero es que no influye para nada tampoco.

Dejo el código completo por para que no se tenga que estar copiando por partes si alguien lo quiere probar
Código PHP:
Ver original
  1. $presupuestototal=0.6;
  2. $cantidad_maxima = $presupuestototal-0.5;
  3. $cantidadsumatoria=0;
  4. settype($cantidadsumatoria,"double");
  5. while ($cantidadsumatoria<=$cantidad_maxima)
  6. {
  7.    echo $cantidadsumatoria . "<br>";
  8.    $cantidadsumatoria+=0.1;
  9. }//fin while

Gracias de antemano
  #2 (permalink)  
Antiguo 27/09/2012, 09:39
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 11 meses
Puntos: 35
Respuesta: Error raro con float y bucle while

Debes tener en cuenta que a $presupuestototal le restas 0.5 osea que si tienes de $presupuestototal 0.3 y le restas 0.5 te daria menor q cero.
  #3 (permalink)  
Antiguo 27/09/2012, 09:42
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Error raro con float y bucle while

No si eso lo controlo por otro lado, en lo que planteo en mi primer mensaje siempre va a estar a 0.5 o por encima, asi que siempre como mínimo tiene que imprimir 0
  #4 (permalink)  
Antiguo 27/09/2012, 09:51
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Error raro con float y bucle while

en vez de echo $cantidadsumatoria . "<br>";
hace var_dump($cantidadsumatoria);
para chequear tipo y valor
  #5 (permalink)  
Antiguo 27/09/2012, 11:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Error raro con float y bucle while

Gracias por tu respuesta Patriarka (y la anterior maxpower2008 también), pero no cambia nada.
El error digamos es que por alguna razón que cuando presupuestototal toma valor 0.5 o 0.6, es decir cuanto la cantidad sumatoria en esos dos casos es 0.1 o 0.2, recorre el array una vez menos de la cuenta porque no interpreta que 0.1 <= 0.1 aunque sean valores float o double totalmente iguales
  #6 (permalink)  
Antiguo 27/09/2012, 13:06
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Error raro con float y bucle while

Pues probé el código y parece funcionar bien. Quizá sea cosa de configurar la precisión de decimales de tu php.
  #7 (permalink)  
Antiguo 27/09/2012, 13:22
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Error raro con float y bucle while

Cita:
Iniciado por ocp001a Ver Mensaje
Pues probé el código y parece funcionar bien. Quizá sea cosa de configurar la precisión de decimales de tu php.
Hola, gracias por contestarme.
Este codigo que te pongo abajo tal como está aquí? Es decir que presupuestototal valga o 0.6 o 0.7 verdad?

Código PHP:
Ver original
  1. $presupuestototal=0.6;
  2.     $cantidad_maxima = $presupuestototal-0.5;
  3.     $cantidadsumatoria=0;
  4.     settype($cantidadsumatoria,"double");
  5.     while ($cantidadsumatoria<=$cantidad_maxima)
  6.     {
  7.        echo $cantidadsumatoria . "<br>";
  8.        $cantidadsumatoria+=0.1;
  9.     }//fin while

Con esos dos únicos valores son con los que da fallo, con el resto de valores no los da. La cuestion es que en mi servidor local no lo recorre y en el servidor donde lo tengo alojado en internet tampoco. En cambio como digo si el valor ya iguala o supera los 0.8 no hay problema y lo hace perfecto recorriendolo las veces necesarias
  #8 (permalink)  
Antiguo 27/09/2012, 14:19
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Error raro con float y bucle while

ok mostranos el error que devuelve
  #9 (permalink)  
Antiguo 27/09/2012, 15:08
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Error raro con float y bucle while

Cita:
Iniciado por Patriarka Ver Mensaje
ok mostranos el error que devuelve
Error de que de error no hay sino que no lo recorre

Ejemplo: Si vale presupuestototal = 0.6, lo recorre una vez, es decir imprime solo 0
Código PHP:
Ver original
  1. float 0

Si vale 0.7 igual
Código PHP:
Ver original
  1. float 0

Y a partir de 0.8 todo correcto:
Código PHP:
Ver original
  1. float 0
  2. float 0.1
  3. float 0.2
  4. float 0.3
  #10 (permalink)  
Antiguo 27/09/2012, 15:45
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Error raro con float y bucle while

Así tal cual hice la prueba. Y sí, dio valores correctos con 0.6 y 0.7
  #11 (permalink)  
Antiguo 27/09/2012, 16:30
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Error raro con float y bucle while

Cita:
Iniciado por ocp001a Ver Mensaje
Así tal cual hice la prueba. Y sí, dio valores correctos con 0.6 y 0.7
Pues me quedo patidifuso

¿Como se puede ver lo de la precisión de decimales en php.ini?

PD: gracias de nuevo

Etiquetas: bucle, float, raro, variables
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 09:19.