Jump to content

Promoção de Natal SAC Mensal

Contrate e ganhe 1 Kit agenda + Caneta
Saiba mais

LANÇAMENTO
Curso Completo - Dominando o ACBrMonitor

Conheça o Curso

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

doidopb

Casas Decimais no MySQL

Recommended Posts

Olá a todos,

Precisei agora mudar o número de casas decimais de um campo DOUBLE chamado "vuncom" em minha base de dados MySQL. Até então tal campo era DOUBLE(10,3), mas para seguir a regra do manual da NFe, precisei modificar o mesmo para (21,10), de modo que o mesmo passasse a aceitar até 11 dígitos à esquerda da vírgula com até 10 casas decimais .

Nisso descobri que o campo DOUBLE não aceitava tal intervalo, e precisaria usar o tipo DECIMAL para tal e com o mesmo funcionou perfeitamente. Pesquisei sobre a diferença entre o FLOAT, DOUBLE e DECIMAL no seguinte link: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-overview.html. Mas alguns pontos do texto me geraram dúvidas, pois conflitaram com testes que realizei em meu computador Windows XP.

1º - O texto é exato ao falar que o tipo DECIMAL aceita até 65 números à esquerda da vírgula e 30 DECIMAIS, já ao falar sobre o FLOAT e DOUBLE o texto passa valores aproximados de acordo com o hardware. Como assim o hardware? O hardware seria o sistema operacional?

2º - O texto menciona que o tipo FLOAT tem aproximadamente uma precisão de até 7 casas decimais, mas em meus testes o mesmo só aceitou valores numéricos com até 6 dígitos INCLUINDO as casas decimais. Ex.: 1234,56 - 123,456 - 12,3456... Porque isso?

2º - O texto menciona que o tipo DOUBLE tem aproximadamente uma precisão de até 15 casas decimais, mas em meus testes o mesmo só aceitou valores numéricos com até 15 dígitos INCLUINDO as casas decimais. Ex.: 123456789123,456 - 123456789,123456 - 12345678912345,6... Porque isso?

Desde já agradeço a atenção de todos

Share this post


Link to post
Share on other sites
16 horas atrás, doidopb disse:

1º - O texto é exato ao falar que o tipo DECIMAL aceita até 65 números à esquerda da vírgula e 30 DECIMAIS, já ao falar sobre o FLOAT e DOUBLE o texto passa valores aproximados de acordo com o hardware. Como assim o hardware? O hardware seria o sistema operacional?

Confere por favor, pois o manual deveria dizer "de acordo com o hardware e/ou sistema operacional".

De qualquer maneira, quando fala sobre o hardware está principalmente falando sobre o processador. Quer dizer que o código do MySQL joga pro processador é a responsabilidade de fazer os cálculos com esse tipo de número. E, se ele é responsável pelos cálculos, também é responsável pelos limites do que é suportado.

Isso é assim em muitos BD diferentes.

16 horas atrás, doidopb disse:

2º - O texto menciona que o tipo FLOAT tem aproximadamente uma precisão de até 7 casas decimais, mas em meus testes o mesmo só aceitou valores numéricos com até 6 dígitos INCLUINDO as casas decimais. Ex.: 1234,56 - 123,456 - 12,3456... Porque isso?

Isso eu não sei te dizer ao certo. Pode depender dos testes, da configuração do BD, do hardware e etc...

Mas note que o primeiro parâmetro do tipo 'M' é o número total de dígitos, incluindo casas decimais.

Veja que a descrição é "aproximadamente até 7 casas". O que significa que nunca vai passar de 7 casas, e em muitos casos vai ser menos que isso.

16 horas atrás, doidopb disse:

2º - O texto menciona que o tipo DOUBLE tem aproximadamente uma precisão de até 15 casas decimais, mas em meus testes o mesmo só aceitou valores numéricos com até 15 dígitos INCLUINDO as casas decimais. Ex.: 123456789123,456 - 123456789,123456 - 12345678912345,6... Porque isso?

É o mesmo caso do Float acima...

Espero ter ajudado em alguma coisa...

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

PS.: Sobre esse assunto é bom lembrar que números decimais, ou seja de ponto flutuante, (FLOAT, REAL, DOUBLE, etc...) geralmente não são armazenados exatamente como escrevemos.

Isso porque existe um número infinitos entre 0,1 e 0,2. Da mesma forma existe uma quantidade infinita de números entre 0,00001 e 0,00002. Então os cálculos são aproximados.

Esse artigo explica esses detalhes:

What Every Computer Scientist Should Know About Floating-Point Arithmetic - David Goldberg 

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites
Citar

 

Confere por favor, pois o manual deveria dizer "de acordo com o hardware e/ou sistema operacional".

De qualquer maneira, quando fala sobre o hardware está principalmente falando sobre o processador. Quer dizer que o código do MySQL joga pro processador é a responsabilidade de fazer os cálculos com esse tipo de número. E, se ele é responsável pelos cálculos, também é responsável pelos limites do que é suportado.

Isso é assim em muitos BD diferentes.

 

Olá EMBarbosa,

Tudo bom?

Realmente tentei escrever 65 à esquerda da vírgula e 30 decimais e ele não aceitou. Mas o formato (21,10) APARENTEMENTE funcionou e só nesse, pois tentei escrever números nesse comprimento e gravou aparentemente normal. Estou usando o formato certo para a minha necessidade (21,10) ? Qual você usa em seu banco para armazenas todas essas casas decimais possíveis da tag vUnCom?

Share this post


Link to post
Share on other sites
1 hora atrás, doidopb disse:

Estou usando o formato certo para a minha necessidade (21,10) ? Qual você usa em seu banco para armazenas todas essas casas decimais possíveis da tag vUnCom?

Me parece ok, mas não sou a melhor pessoa pra te dizer porque geralmente eu não uso MySQL. Talvez alguém mais possa te ajudar.

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...