Como usar o MySQL DECIMAL?

Não consigo perceber a casa DECIMAL do MySQL. Preciso que a linha possa conter um número entre 00.0001 e 99.9999. Como iria estruturá-lo para funcionar assim?

 138
Author: Charles Zink, 2011-01-29

4 answers

As colunas duplas são NÃO iguais às colunas decimais, e você vai ter problemas se usar colunas duplas para os dados financeiros.

O duplo é, na verdade, apenas uma versão de precisão dupla (64 bits em vez de 32 bits) de FLOAT. Os números de vírgula flutuante são representações aproximadas de números reais e não são exactos. Na verdade, números simples como 0.01 não têm uma representação exata em flutuadores ou tipos duplos.

Colunas decimais são representações exatas, mas ocupam muito mais espaço para uma gama muito menor de números possíveis. Para criar uma coluna capaz de manter valores de 0,0001 a 99.9999, como pediu, necessitaria da seguinte declaração

CREATE TABLE your_table
(
    your_column DECIMAL(6,4) NOT NULL
);

A definição da coluna segue o formato DECIMAL(M, D) onde M é o número máximo de dígitos (o precisão) e D é o número de dígitos à direita da vírgula decimal (o escala).

Isto significa que o comando anterior cria uma coluna que aceita valores de -99.999999 a 99.9999. Você também pode criar uma coluna DECIMAL sem sinal, variando de 0,0000 a 99.9999.

Para mais informações sobre a casa DECIMAL do MySQL, os documentos oficiais são sempre um grande recurso.

Tenha em mente que toda esta informação é verdadeira para versões do MySQL 5.0.3 e maior. Se você está usando versões anteriores, você realmente deve atualizar.

 371
Author: Alex Recarey, 2015-08-05 21:23:13
Apesar das respostas acima parecerem correctas, apenas uma explicação simples para lhe dar uma ideia de como funciona.

Suponha que a sua coluna está definida como DECIMAL(13,4). Isto significa que a coluna terá um tamanho total de 13 dígitos onde 4 destes serão usados para representação de precisão.

Então, em resumo, para essa coluna você teria um valor máximo de: 999999999.9999
 37
Author: Cristiano, 2018-04-16 01:30:43

Existem soluções corretas nos comentários, mas para resumi-las numa única resposta:

Tem de usar a casa DECIMAL(6,4).

Então você pode ter 6 Número total de dígitos, 2 antes e 4 depois do ponto decimal (a escala). Pelo menos de acordo com isto.

 9
Author: Zoltán Hajdú, 2017-01-06 23:17:36

MySQL 5.x specification for decimal datatype is: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. A resposta acima está errada ao dizer que casas decimais não assinadas não são possíveis.

Para definir um campo que permita apenas casas decimais sem sinal, com um comprimento total de 6 dígitos, dos quais 4 são casas decimais, você iria usar: DECIMAL (6,4) UNSIGNED.

Você também pode criar sem sinal (ie. not negative) FLOAT and DOUBLE datatypes.

 5
Author: Markus AO, 2015-06-21 08:24:50