Não consigo entender o DECIMAL do MySQL. Eu preciso da linha para poder conter um número entre 00.0001 e 99.9999. Como eu a estruturaria para funcionar assim?
Não consigo entender o DECIMAL do MySQL. Eu preciso da linha para poder conter um número entre 00.0001 e 99.9999. Como eu a estruturaria para funcionar assim?
Respostas:
As colunas DUPLAS não são iguais às colunas DECIMAIS, e você terá problemas se usar as colunas DUPLO para dados financeiros.
DOUBLE é na verdade apenas uma versão de precisão dupla (64 bits em vez de 32 bits) do FLOAT . Os números de ponto flutuante são representações aproximadas de números reais e não são exatos. De fato, números simples como 0,01 não têm uma representação exata nos tipos FLOAT ou DOUBLE.
As colunas DECIMAIS são representações exatas, mas ocupam muito mais espaço para um intervalo muito menor de números possíveis. Para criar uma coluna capaz de armazenar valores de 0,0001 a 99,9999, como você pediu, você precisaria da seguinte instrução
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
A definição da coluna segue o formato DECIMAL (M, D), em que M é o número máximo de dígitos (a precisão ) e D é o número de dígitos à direita do ponto decimal (a escala ).
Isso significa que o comando anterior cria uma coluna que aceita valores de -99.9999 a 99.9999. Você também pode criar uma coluna DECIMAL NÃO ASSINADA, variando de 0,0000 a 99,9999.
Para mais informações sobre o MySQL DECIMAL, os documentos oficiais são sempre um ótimo recurso.
Tenha em mente que todas essas informações são verdadeiras para as versões do MySQL 5.0.3 e superior. Se você estiver usando versões anteriores, você realmente deve atualizar.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Ele retornará um erro fora da faixa para valores negativos. Você também pode criar FLOAT e DOUBLE não assinados. Manual: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Embora as respostas acima pareçam corretas, apenas uma explicação simples para lhe dar uma idéia de como funciona.
Suponha que sua coluna esteja configurada para ser DECIMAL(13,4)
. Isso significa que a coluna terá um tamanho total de 13 dígitos, onde 4 deles serão usados para representação de precisão.
Portanto, em resumo, para essa coluna, você teria um valor máximo de: 999999999.9999
Existem soluções corretas nos comentários, mas para resumi-las em uma única resposta:
Você precisa usar DECIMAL (6,4).
Então você pode ter 6 número total de dígitos, 2 antes e 4 após o ponto decimal (a escala). Pelo menos de acordo com isso .
5.x MySQL especificação de tipo de dados decimal é: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. A resposta acima está errada ao dizer que decimais não assinados não são possíveis.
Para definir um campo permitindo que somente decimais não assinados, com um comprimento total de 6 dígitos, dos quais 4 casas decimais, você usaria: DECIMAL (6,4) UNSIGNED
.
Você também pode criar tipos de dados FLOAT e DOUBLE não assinados (isto é, não negativos).