Foros del Web » Programando para Internet » PHP »

Division exacta

Estas en el tema de Division exacta en el foro de PHP en Foros del Web. Hola a todos, tengo un problema al realizar una división que en principio es exacta y no se darle explicación. ¿Alguien me puede explicar esto? ...
  #1 (permalink)  
Antiguo 15/01/2008, 04:05
 
Fecha de Ingreso: noviembre-2005
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 0
Division exacta

Hola a todos, tengo un problema al realizar una división que en principio es exacta y no se darle explicación.

¿Alguien me puede explicar esto?

Código:

echo ceil(12.96/1.44);
echo '<br>';
echo number_format(12.96/1.44, 20, ",", "");


Salida:

10
9,00000000000000177636


Gracias.
  #2 (permalink)  
Antiguo 15/01/2008, 05:34
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Desacuerdo Re: Division exacta

Yo tenia ese problema con VisualBasic.... y por eso (entre otras cosas), lo deje

Código PHP:
if ((12.96/1.44)>9) echo 'estamos en problemas'
ERROR CONFIRMADO!
__________________
Salu2!
  #3 (permalink)  
Antiguo 15/01/2008, 06:06
 
Fecha de Ingreso: noviembre-2005
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Division exacta

Vaya, pues estamos apañaos!

¿Entonces quien confia ahora en las divisiones de php? A mi en principio se me ocurre hacer un round dentro del ceil, pero es una solución un poco cutre.

echo ceil(round(12.96/1.44,1));

¿Alguien tiene alguna otra solución?
  #4 (permalink)  
Antiguo 15/01/2008, 06:21
 
Fecha de Ingreso: octubre-2004
Mensajes: 2.627
Antigüedad: 19 años, 5 meses
Puntos: 48
Re: Division exacta

Es un problema de los ordenadores, el tema de la precision. La culpa la tiene el binario, y la forma de representar los numeros decimales en binario. El problema esta en que en binario quizas para representar el numero decimal se necesitan mas bits de los que corresponde al tipo de dato que lo almacena. Asi que por ejemplo puede ser que la representacion binaria de 19.96 con el numero de bits que usa PHP sea 19.960000000000000000000003.

Prueba a usar http://www.php.net/manual/en/ref.bc.php

http://es.php.net/manual/en/language.types.float.php
  #5 (permalink)  
Antiguo 15/01/2008, 09:12
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: Division exacta

Asi es DarkJ tiene razón, y uno de los mayores problemas es que estas haciendo una división sobre valores de punto flotante, por lo cual el resultado nunca sera el mas acertado, es por eso que se han creado bibliotecas para realizar operaciones de punto flotante lo mas exactas posibles.

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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 08:41.