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

ifnull me añade decimales en un campo tipo float

Estas en el tema de ifnull me añade decimales en un campo tipo float en el foro de Mysql en Foros del Web. Hola! Os comento mi problema. Tengo uan tabla en la que hay un campo tipo float. El campo esta definido como : valor float ( ...
  #1 (permalink)  
Antiguo 16/11/2010, 10:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 65
Antigüedad: 14 años
Puntos: 0
ifnull me añade decimales en un campo tipo float

Hola! Os comento mi problema. Tengo uan tabla en la que hay un campo tipo float. El campo esta definido como : valor float ( admite nulos ). Pues bien, este campo puede calcularse de 2 maneras: 1) Se indica directamente, en tal caso siempre se guarda un número entero. 2) Mediante un cálculo, en tal caso antes de informar este campo, se efectúa un redondeo a dos decimales ( round(v_valor, 2) ). El camo se informa correctamente en ambos casos. Pero, al extraer su valor es cuando me da problemas. Por seguridad empleo la función "ifnull" de la siguiente manera: select ifnull(valor,0) from tabla. Y en lugar de recuperarme el número tal cual está en la tabla, me devuelve una serie de decimales adicionales. Si escribo: select valor from tabla obtengo 45,45 que es el valor correcto. Pero si escribo select ifnull(valor,0) from tabla, obtengo 45,45000789.
¿Qué hago mal? Se arregla rápidamente poniendo select ifnull(round(valor,2),0) from tabla. Pero parace evidente que no es la manera limpia, además, lógicamente, ahora para los valores que no tenían decimales me añade ",00". ¿Qué hago mal?

Muchas gracias por vuestro tiempo.
  #2 (permalink)  
Antiguo 16/11/2010, 12:42
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: ifnull me añade decimales en un campo tipo float

Peter esto parece ser un bug de mysql.
mira el tema aca
http://bugs.mysql.com/bug.php?id=8595

La solución... la que tu ya propusiste. Utiliza la función ROUND.

Puedes buscar un poco mas, si en las nuevas versiones esto ya fue corregido.

Saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/11/2010, 13:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 65
Antigüedad: 14 años
Puntos: 0
Respuesta: ifnull me añade decimales en un campo tipo float

Muchas gracias por tu respuesta huesos! Lo suponía... Esta vez he tenido suerte. Finalmente el hecho de recuperar un valor nulo me convenía!

Una manera de obtener el número tal como comentaba inicialmente podría ser así:

select ifnull(substr(valor,1, length(valor)),0) from tabla

Es un poco drástico... yo lo sólo lo usaría si estamos seguros que nos va a pasar este problema. Entre otras cosas por que, como bien dices, estos sólo ocurre en determinadas ocasiones ( por ejemplo en la operación de campos tipo float, o bien si el campo se informa mediante un cálculo ). Y segundo por que lo que se obtiene ahora no es un float sino un char. Que esto podría no ser de importancia si se está usando PHP ya que en principio sabría interpretarlo ( o bien podría transformarse ). Pero ya digo, quizás es un poco drástico... Casi mejor usar un round y listo!

Saludos!

Etiquetas: float, ifnull, tipo, campos
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 10:11.