Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] En mysql introduzco y visualizo un float correcto y en php salen mas decimales

Estas en el tema de En mysql introduzco y visualizo un float correcto y en php salen mas decimales en el foro de Mysql en Foros del Web. Hola a todos No se porque me puede ocurrir lo siguiente. He estado buscando información, pero en realidad no se exactamente como buscarla para llegar ...
  #1 (permalink)  
Antiguo 12/03/2013, 06:46
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
En mysql introduzco y visualizo un float correcto y en php salen mas decimales

Hola a todos

No se porque me puede ocurrir lo siguiente. He estado buscando información, pero en realidad no se exactamente como buscarla para llegar a encontrar algo.

Tengo una tabla en la que hay un campo float. Hasta ahi todo normal. Si introduzco el dato a traves de phpmyadmin se visualiza correctamente, es decir, por ejemplo, si introduzco 10.2, se visualiza luego a través de phpmyadmin 10.2 cuando hago la consulta.

Pero si lo hago a través de php, ese 10.2 me lo convierte en: 10.199999809265137. Es decir, introduzco por phpmyadmin el 10.2 y lo visualizo igual pero al visualizarlo por php da mas decimales.

He leido que puede ser un error de aproximación de php pero no se si hay alguna solución al respecto para que no desvarie de esa manera luego cuando se quieren hacer cálculos como sumas y restas a través de php.

Un saludo
  #2 (permalink)  
Antiguo 12/03/2013, 07:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Tipo de columna equivocado en la tabla.
Para números con decimales precisos se debe usar DECIMAL. FLOAT es un tipo de dato por aproximación, y la interfaz que usas está preparada para realizar redondeos, los cuales son los que generan ese "10,2". Pero el numero que devuelve realmente MySQL es ese que el PHP te está tomando, porque es lo que realmente recibe.
La explicación de esto es larga y requiere conocer lo que son representaciones binarias de punto flotante (en las computadoras no existen cifras, los numeros se representan binariamente). No creo que sea necesario ahora.
Lo que te puedo recomendar, para evitarte problemas, es que si necesitas que las cifras no se alteren al ingresarlas, uses DECIMAL y no FLOAT.
En el caso del DECIMAL, debes indicar longitud y cantidad de decimales que se usarán. La longitud es la longitud total de la cifra máxima, incluyendo el punto decimal y la cantidad de decimales.
Así, un DECIMAL(10,3) representará como mucho el numero 999999.999.
¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/03/2013, 07:58
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Se entiende perfecto!! Gracias por la respuesta.
Solo una duda algo tonta: con FLOAT se usa el punto para separar los decimales y con DECIMAL.... es igual?? o como pusiste en tu explicación hay que usar la coma?

Gracias de nuevo

PD: edito al hacer la comprobación y ver que es el punto lo que se debe utilizar. Gracias de nuevo, sobretodo por la rapidez. Un saludo

Última edición por yosoloyo; 12/03/2013 a las 08:05 Razón: Lo comprobé y vi que era punto
  #4 (permalink)  
Antiguo 12/03/2013, 08:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

En todos los DBMS se usa la representación inglesa para los decimales, es decir el punto. Puse el ejemplo con coma, para que fuese comprensible, pero los intérpretes de comandos de los DBMS siempre usan el punto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/03/2013, 08:32
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Cita:
Iniciado por gnzsoloyo Ver Mensaje
En todos los DBMS se usa la representación inglesa para los decimales, es decir el punto. Puse el ejemplo con coma, para que fuese comprensible, pero los intérpretes de comandos de los DBMS siempre usan el punto.
Ahora me doy cuenta que los digamos enteros que no tengan decimales se le añade el punto cero, es decir, un 10, es automaticamente guardado como 10.0, por lo que ahora digamos que supone que cuando sea un "entero" ..... como lo redondearía a través la consulta sql para que no salga el .0??
Por php si con usar por ejemplo $redondeado=round($precio * 100) / 100; sería suficiente pero claro para evitar ese calculo por php no se si sería posible hacerlo con algun if anidado en la misma consulta
  #6 (permalink)  
Antiguo 12/03/2013, 09:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Como bien te dice @andresdzphp, eso se puede perfectamente manejar dentro de PHP.
Pero si quieres que ya el resultado te llege de una cierta forma, MySQL tiene dos funciones básicas para eso: ROUND(valor[, decimales]) y TRUNCATE(valor[, decimales]).
En ambos casos, "valor" es el valor numérico a redondear o truncar, mientras que el segundo parámetro es opcional y si no se pone, devolverá un entero.
Ahora bien, la diferencia es que ROUND() redondea el valor, de modo que si se indican decimales se redondeará a lo que esos decimales den.
Pero truncate no redondea, simplemente descarta todo lo que no esté en el rando indicado.
Es decir:
Cita:
TRUNCATE(123.874) devuelve 123
TRUNCATE(123.874, 1) devuelve 123.8
TRUNCATE(123.874, 2) devuelve 123.87
ROUND(123.874) devuelve 124
ROUND(123.874, 1) devuelve 123.9
ROUND(123.874, 2) devuelve 123.87
ROUND(123.874, 3) devuelve 123.874
¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 12/03/2013, 18:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Si gracias a ambos, ya conocia esa serie de funciones. Lo que me quiero referir es si hay algo que quite solo los punto cero cuando sea necesario. Dejo un ejemplo.

10.1 --> devolvería 10.1
10.0 --> devolvería 10

Por eso decía que como posible solución y ya desde php hacía ese calculo:
$redondeado=round($precio * 100) / 100;

Pero me lo quisiera evitar a ser posible desde la misma consulta de mysql si es que hay alguna posible alternativa a ello.
  #8 (permalink)  
Antiguo 12/03/2013, 18:12
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Viste los ejemplos de @gnzsoloyo ?

Cita:
mysql> SELECT TRUNCATE(1.999,0);
-> 1
Edito link: http://dev.mysql.com/doc/refman/5.0/...functions.html
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 12/03/2013 a las 18:19
  #9 (permalink)  
Antiguo 12/03/2013, 18:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Por allí lo que se te escapa es que se pueden anidar:
Código SQL:
Ver original
  1. SELECT TRUNCATE(ROUND((precio*100)/100)) valor
  2. FROM tabla
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 12/03/2013, 18:42
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: En mysql introduzco y visualizo un float correcto y en php salen mas decim

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por allí lo que se te escapa es que se pueden anidar:
Código SQL:
Ver original
  1. SELECT TRUNCATE(ROUND((precio*100)/100)) valor
  2. FROM tabla
Si cierto........ menudo estoy echo!! no se como no caí antes.

Nada gracias asunto más que resuelto

Un saludo y gracias a ambos

Etiquetas: correcto, float, php, tabla
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 03:14.