No puedo entender el DECIMAL de MySQL. Necesito que la fila pueda contener un número entre 00.0001 y 99.9999. ¿Cómo lo estructuraría para que funcione así?
No puedo entender el DECIMAL de MySQL. Necesito que la fila pueda contener un número entre 00.0001 y 99.9999. ¿Cómo lo estructuraría para que funcione así?
Respuestas:
Las columnas DOBLES no son lo mismo que las columnas DECIMALES, y usted tendrá problemas si usa columnas DOBLES para datos financieros.
DOUBLE es en realidad una versión de FLOAT de doble precisión (64 bits en lugar de 32 bits) . Los números en coma flotante son representaciones aproximadas de números reales y no son exactos. De hecho, los números simples como 0.01 no tienen una representación exacta en los tipos FLOTANTE o DOBLE.
Las columnas DECIMAL son representaciones exactas, pero ocupan mucho más espacio para un rango mucho más pequeño de números posibles. Para crear una columna capaz de contener valores de 0.0001 a 99.9999 como usted pidió, necesitaría la siguiente declaración
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
La definición de columna sigue el formato DECIMAL (M, D) donde M es el número máximo de dígitos (la precisión ) y D es el número de dígitos a la derecha del punto decimal (la escala ).
Esto significa que el comando anterior crea una columna que acepta valores de -99.9999 a 99.9999. También puede crear una columna DECIMAL NO FIRMADA, que oscila entre 0.0000 y 99.9999.
Para obtener más información sobre MySQL DECIMAL, los documentos oficiales son siempre un gran recurso.
Tenga en cuenta que toda esta información es cierta para las versiones de MySQL 5.0.3 y posteriores. Si está utilizando versiones anteriores, realmente debería actualizar.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Devolverá un error fuera de rango para valores negativos. También puede crear FLOAT y DOUBLE sin firmar. Manual: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Aunque las respuestas anteriores parecen correctas, solo una explicación simple para darle una idea de cómo funciona.
Suponga que su columna está configurada para ser DECIMAL(13,4)
. Esto significa que la columna tendrá un tamaño total de 13 dígitos, donde 4 de estos se utilizarán para la representación de precisión.
Entonces, en resumen, para esa columna tendría un valor máximo de: 999999999.9999
Hay soluciones correctas en los comentarios, pero para resumirlas en una sola respuesta:
Tienes que usar DECIMAL (6,4).
Entonces puede tener 6 números totales de dígitos, 2 antes y 4 después del punto decimal (la escala). Al menos según esto .
MySQL 5.x especificación de tipo de datos decimal es: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. La respuesta anterior es incorrecta al decir que los decimales sin signo no son posibles.
Para definir un campo permitiendo que sólo los decimales sin signo, con una longitud total de 6 dígitos, 4 de las cuales son decimales, se debería utilizar: DECIMAL (6,4) UNSIGNED
.
También puede crear tipos de datos FLOAT y DOUBLE sin signo (es decir, no negativos).