Foros del Web » Programando para Internet » PHP »

Errores de cálculo

Estas en el tema de Errores de cálculo en el foro de PHP en Foros del Web. Estoy realizadon una simple resta 688.63 - 688.64 y el resultado devuelto en php es -0.0099999999999909. Con otros calculos y comparaciones de números me han ...
  #1 (permalink)  
Antiguo 03/04/2008, 03:58
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Errores de cálculo

Estoy realizadon una simple resta 688.63 - 688.64 y el resultado devuelto en php es -0.0099999999999909.

Con otros calculos y comparaciones de números me han pasado cosas similares de que un numero se vuelve "loco" y me muestra la dira de decimales Incluso aveces numeros del estilo de 0.123521E-14

Alguien sabe sabe como evitar estos errores de calculo?
Los números provienen de campos de texto de formularios
  #2 (permalink)  
Antiguo 03/04/2008, 06:35
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: Errores de cálculo

Redondea a 4 ó 5 decimales...
__________________
Kelpie
  #3 (permalink)  
Antiguo 03/04/2008, 06:53
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Errores de cálculo

En el número 0.123521E-14 se utiliza notación cientifica. Averigua un poco sobre el tema (son tantos los ceros del número que se simplifican con esta notación)

Para redondear el número usa esta función.

Código PHP:
echo round(688.63 688.64,2); 
Saludos
  #4 (permalink)  
Antiguo 03/04/2008, 10:36
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Re: Errores de cálculo

Aunque redoendee el numero como me indicais no entiendo de ninguna manera como es que php pueda tener un error de cálculo de este tipo.

Ya que como todos podemos ver
688.63 - 688.64 es -0.01 y no -0.0099999999999909 aunque claramente redondeando
  #5 (permalink)  
Antiguo 03/04/2008, 10:56
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
Re: Errores de cálculo

Hola tronat40.

Ese error es típico y el problema es que nos números de punto flotante no son tan precisos, por eso debes de usar round.

Si quieres una precisión mas exacta te recomiendo uses la extensión BCmath de PHP.

Saludos.
  #6 (permalink)  
Antiguo 03/04/2008, 11:19
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Re: Errores de cálculo

Aunque me sorprende bastante utilizando la extensión bcmath he comprobado que funciona perfectamente, aunque cambiar un simple simbolo + por bcadd se me va a hacer enfarragoso, la opción del round me gusta menos.


MUCHAS GRACIAS a todos.
  #7 (permalink)  
Antiguo 03/04/2008, 12:02
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
Re: Errores de cálculo

Hola tronat40,

El problema no es de PHP, y es un problema que te vas a encontrar en todos los lenguajes cuando uses números de punto flotante, ya que estos al almacenar tanto la parte real y los decimales tienen problemas al hacer cálculos, por eso se requiere de una librería mas avanzada.

Saludos.
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 12:36.