Ir para conteúdo
  • Cadastre-se

dev botao

Casas Decimais no MySQL


bnobre
  • Este tópico foi criado há 1603 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

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

Link para o comentário
Compartilhar em outros sites

  • Consultores
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...

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros sites

  • Consultores

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 

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
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?

Link para o comentário
Compartilhar em outros sites

  • Consultores
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.

  • Curtir 1

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1603 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.