Foros del Web » Programando para Internet » PHP »

float(2.8421709430404E-14)?

Estas en el tema de float(2.8421709430404E-14)? en el foro de PHP en Foros del Web. Que tal muchachos, estuve haciendo unos calculcos y lo que pasa que cuando mi valor llego "B"(float) llego a la misma cantidad que mi valor ...
  #1 (permalink)  
Antiguo 27/02/2012, 15:02
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
float(2.8421709430404E-14)?

Que tal muchachos, estuve haciendo unos calculcos y lo que pasa que cuando mi valor llego "B"(float) llego a la misma cantidad que mi valor "A"(int), al realizar una resta me salio esto como resultado

Cita:
float(2.8421709430404E-14)
¿ Creo que es un tema matematico no ?

Entonces lo unico que hice, fue cambiar mi variable por otro valor, al tipo (int), pero ahora me sale 1 en ves de 0 xD

La variable B llego a ese valor al usar el number_format, ya que su primer parametro castea la variable al tipo float.

Ahora tambien probe con esto para salir de la duda, y miren

Código PHP:
Ver original
  1. $a = (int)250;
  2.     $b = (float)250;
  3.     die($a-$b);
  4.  
  5. El resultado fue 0;
  #2 (permalink)  
Antiguo 27/02/2012, 15:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: float(2.8421709430404E-14)?

El problema es por el punto flotante de los floats, si quieres manejar floats, lo más recomendado es usar BCMath.

Saludos.
  #3 (permalink)  
Antiguo 27/02/2012, 15:24
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: float(2.8421709430404E-14)?

Sigo sin entender, entonces que solucion puedo implementar para no trabajar con floats, sino mas bien con decimals, ya que cuando casteo el float a INT, mi valor original era 250 y luego se convirtio en 249, no tengo idea porque ...

Que son los puntos flotantes los ¿decimales?

Última edición por HiToGoRoShi; 27/02/2012 a las 15:29
  #4 (permalink)  
Antiguo 27/02/2012, 15:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: float(2.8421709430404E-14)?

Así es, por eso debes de usar la librería que te puse más arriba, es mucho más precisa cuando tratas con valores de punto flotante (o sea floats).

Saludos.
  #5 (permalink)  
Antiguo 27/02/2012, 15:36
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: float(2.8421709430404E-14)?

Esta bien, usare esa libreria pero sigo sin enteder porque me sale ese error xD
  #6 (permalink)  
Antiguo 27/02/2012, 15:38
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: float(2.8421709430404E-14)?

Es por lo mismo del punto flotante, no son tan precisos como los ints, ya que guardan mucho más información (por los decimales), es un problema muy recurrente en programación, lee lo siguiente:
http://en.wikipedia.org/wiki/Floatin...uracy_problems

Saludos.
  #7 (permalink)  
Antiguo 27/02/2012, 15:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: float(2.8421709430404E-14)?

Otro ejemplo: http://blogs.office.com/b/microsoft-...g-answers.aspx
  #8 (permalink)  
Antiguo 27/02/2012, 15:49
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años
Puntos: 31
Respuesta: float(2.8421709430404E-14)?

Asi ?, pero cuando le hago un var_dump me muestra como un entero sin decimales ..... bueno ni modo, por ultimo le aplique un number_format y se corrigio

Etiquetas: 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 22:14.