Jump to content

dev botao

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

Recommended Posts

  • Membros Pro
Posted

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

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

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

  • Consultores
Posted
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
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.
  • Este tópico foi criado há 1861 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...