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

Lontitud de un campo float

Estas en el tema de Lontitud de un campo float en el foro de Mysql en Foros del Web. Hola a todos. A la hora de crear una tabla mediante phpmyadmin, pide una longitud/valores de los campos. Tengo entendido que un float requiere un ...
  #1 (permalink)  
Antiguo 21/12/2012, 20:07
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Lontitud de un campo float

Hola a todos.

A la hora de crear una tabla mediante phpmyadmin, pide una longitud/valores de los campos.
Tengo entendido que un float requiere un tamaño de 4 bytes. Entonces, si creo un campo tipo float en longitud tengo que ponerle 4?

Y si pongo 5 qué ocurre?

Gracias de antemano.
  #2 (permalink)  
Antiguo 21/12/2012, 20:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 18 años, 11 meses
Puntos: 839
Respuesta: Lontitud de un campo float

http://dev.mysql.com/doc/refman/5.0/...ric-types.html
Cita:
Iniciado por Manual de MySQL
El tipo FLOAT se usa para representar tipos numéricos aproximados. El estándar SQL permite una especificación opcional de la precisión (pero no del rango del exponente) en bits a continación de la palabra clave FLOAT entre paréntesis. La implementación de MySQL soporta esta especificación opcional de precisión, pero el valor de precisión se usa sólo para determinar el tamaño de almacenamiento. Una precisión de 0 a 23 resulta en una columna de precisión simple de cuatro bytes de tamaño FLOAT . Una precisión de 24 a 53 resulta en una columna de doble precisión de ocho bytes de tamaño DOUBLE .

Cuando se especifica la palaba clave FLOAT para tipos de columnas sin especificar la precisión, MySQSL usa cuatro bytes para almacenar los valors.MySQL también soporta una sintaxis alternativa con dos números entre paréntesis a continación de la palabra clave FLOAT . El primer número representa el ancho a mostrar y el segundo número especifica el número de dígitos a almacenar a continuación del punto decimal ( como con DECIMAL y NUMERIC). Cuando se pide a MySQL que almacene un número para tales columnas con más dígitos decimales a continuación del punto decimal del especificado para la columna, el valor se redondea para elminar los dígitos extras cuando se almacena el valor.
Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 21/12/2012, 20:20
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Lontitud de un campo float

lo que no entiendo es porqué si un campo lo establezco: float(5,5) e intento guardar el valor: 25.56 me salta un warning Warning: #1264 Out of range value for column 'lat' at row 1 y él solo me guarda: 0.99999
  #4 (permalink)  
Antiguo 21/12/2012, 20:23
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: Lontitud de un campo float

FLOAT (5, 5) significaría 5 cifras de ancho, de las cuales 5 son decimales a la derecha del punto.
Con una definición como esa no puedes guardar la parte entera del numero, porque no tiene en dónde...
Si hubieras leído con cuidado toda la documentación de MySQL, como te sugieren, lo habrías visto...

Tu error es pensar que esa definición implica (entero, decimales), y no es así. Es (longitud total incluyendo punto, longitud parte decimal)

Desde ya, si lo que quieres es guardar una latitud, por ejemplo, tomada del Google Maps, necesitas
FLOAT(18, 14) o bien DECIMAL(18,14).
__________________
¿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 21/12/2012, 20:29
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Lontitud de un campo float

lo he leído pero mirando en otros sitios lo explican de otra forma contradictoria y me confunden. Otra cosa que no entiendo es la longitud de un int. En la ayuda de mysql, pone: Esta especificación opcional del ancho de muestra se usa para alinear a la izquierda la muestra de los valores con ancho menor que el ancho especificado para la columna.

Pero en muchas páginas explican que el 6 de int(6) significa la longitud de digitos que podrá almacenar. Es decir, si queremos guardar 1000000 necesitaremos un int(7).

Un int almacena 4 bytes, por lo que debe dar igual qué longitud se le ponga, no?
En phpmyadmin, si no se especifica la longitud, por defecto pone 11, xq?
  #6 (permalink)  
Antiguo 21/12/2012, 20:36
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: Lontitud de un campo float

Ese es un error producto de creer que un numero se almacena como cifras, y no es así. Las cifras no existen para la computadora. Los números se almacenan como binarios.
¿Has estudiado cómo son los sistemas de representación binaria?
Bueno, por ejemplo, el 0111111 representa al numero +127, y el 11111111 al -128.
Pero si el numero es UNSIGNED, 11111111 es el +255.

Te sugiero, a menos que te vayas a poner a estudiar Ingeniería en Sistemas, que te atengas a lo que dice el manual.

Respecto a lo del alineamiento, es sencillo: Un UNSIGNED no requiere espacio para el signo, porque no existe, entonces puede usar un espacio más para su ajuste, que es distinto del SIGNED. Pero eso es completamente irrelevante para el uso de interfases gráficas. Sólo se tiene en cuenta si lo usas en modo consola.

¡Ah! Lo olvidaba: En una computadora, el 01011010 podría ser el 90... o la letra "Z".
Todo depende del sistema de representación binaria que se defina.

No te olvides: en una computadora no existen colores, cifras, letras o lineas. Solo binario. El resto son sistemas de representación adoptados por convención...

Un link útil para terminar de comprender: Decimal codificado en Binario

Otro: Numeros de coma flotante

Y uno muy importante: Representación de números negativos
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 21/12/2012 a las 20:49
  #7 (permalink)  
Antiguo 21/12/2012, 21:29
 
Fecha de Ingreso: marzo-2008
Mensajes: 383
Antigüedad: 16 años
Puntos: 5
Respuesta: Lontitud de un campo float

Vale.

Pero porque phpmyadmin pone como longitud 11 por defecto a un int?
  #8 (permalink)  
Antiguo 22/12/2012, 03:59
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: Lontitud de un campo float

Creo que seguís sin intentar interpretar algo que es sencillo, me estás haciendo dar la sensación de que pierdo el tiempo.
Lee de nuevo:
Cita:
Respecto a lo del alineamiento, es sencillo: Un UNSIGNED no requiere espacio para el signo, porque no existe, entonces puede usar un espacio más para su ajuste, que es distinto del SIGNED. Pero eso es completamente irrelevante para el uso de interfases gráficas. Sólo se tiene en cuenta si lo usas en modo consola.
Y volviendo a lo que ya te dijeron:
Cita:
MySQL soporta otra extensión para especificar de forma óptima el ancho a mostrar de un tipo entero en paréntesis después de la palabra clave para el tipo (por ejemplo, INT(4)). Esta especificación opcional del ancho de muestra se usa para alinear a la izquierda la muestra de los valores con ancho menor que el ancho especificado para la columna.

El ancho de muestra no restringe el rango de valores que pueden almacenarse en la columna, sino el número de dígitos que se muestran para valores con ancho que exceda el especificado para la columna.

Cuando se usa en conjunción con el atributo de extensión opcional ZEROFILL, el relleno por defecto de espacios se replaza por ceros. Por ejemplo, para una columna declarada como INT(5) ZEROFILL, un valor de 4 se muestra como 00004. Tenga en cuenta que si almacena valores mayores que el ancho de muestra en una columna entera, puede tener problemas cuando MySQL genera tablas temporales para algunos joins complicados, ya que en estos casos MySQL cree que los datos encajan en el ancho original de la columna.
En el caso del ZEROFILL, cuando tomas los datos desde una aplicación, todos los ceros a la izquierda desapareen, por lo que es irrelevante.
Si quieres evitarte problemas, usa lo que viene por default y no te pongas poner tonterías. SI por default un INT es de 11, dejale 11, si el sistema indica 10, dejale 10.
Y olvídate del tema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: float, php, tabla, 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 08:19.