DEV Community

Cover image for Garanta a Eficiência: Escolhendo entre tipos decimais no SQL
Alexandre
Alexandre

Posted on

Garanta a Eficiência: Escolhendo entre tipos decimais no SQL

Decimais, existem tantos e qual devo escolher ? Saiba que essa decisão é de total importância para não perder dinheiro em seu software.

Conteúdo

  1. Prólogo
  2. Tipos decimais SQL
  3. O que é essa precisão ?
  4. Então quando eu não ira querer precisão
  5. Vamos observar na prática
  6. Conclusão

1. Prólogo

Sempre tive dúvidas sobre a razão pela qual existem tantos tipos de dados decimais no SQL e quando é apropriado utilizá-los, especialmente ao lidar com valores monetários, onde a consistência dos cálculos e a precisão são fundamentais para evitar perdas financeiras. Muitos desses tipos de dados são desconhecidos ou subutilizados no cotidiano de um desenvolvedor web. No entanto, estar ciente dos seus casos de uso diferenças é uma vantagem significativa para quando precisar usar você conseguir identificar.

2. Tipos decimais SQL

Existem diversos tipos de dados decimais disponíveis no SQL, cada um com seu próprio propósito e comportamento. Vamos explorar alguns dos tipos mais comuns:

  1. DECIMAL/NUMERIC

O tipo DECIMAL possui um alias (apelido) chamado NUMERIC, ou seja ambos têm o mesmo comportamento. Esse tipo é especialmente adequado para lidar com valores precisos, como dinheiro, onde é crucial manter a exatidão das informações.

  1. FLOAT

O tipo FLOAT é recomendado para valores aproximados, como estatísticas, por serem eficientes em termos de espaço de armazenamento e desempenho, ocupando um total de 4 bytes de espaço de armazenamento.

  1. DOUBLE

O campo DOUBLE também é apropriado para valores aproximados, mas oferece um range de valores maior em comparação ao FLOAT. Para acomodar essa flexibilidade, ele requer 8 bytes de espaço de armazenamento.

3. O que é essa precisão ?

Essa precisão é você saber que se um cliente comprar 2 produtos que custam R$ 20,30 ele vai pagar R$ 20,60 e não R$ 20,59999931231232321.

4. Então quando eu não ira querer precisão ?

Embora o float possa introduzir variações nos cálculos, há casos de uso em que eles são vantajosos na prática. Aqui estão dois exemplos:

  1. Cálculos científicos e simulações: Em muitas áreas da ciência e da engenharia, os cálculos envolvem números que não exigem uma precisão extrema. Nesses casos, o uso de float pode ser adequado, pois oferece uma representação aproximada dos valores com eficiência de espaço e desempenho. Por exemplo, em simulações físicas, como modelos de sistemas climáticos ou mecânicos, a precisão aproximada fornecida pelos números de ponto flutuante é suficiente e pode acelerar significativamente os cálculos.

  2. Processamento gráfico: Em aplicações de computação gráfica, como jogos ou renderização de imagens, o uso de float é comum para representar coordenadas 3D, cores e transformações. A natureza aproximada dos números de ponto flutuante não é perceptível para a maioria dos usuários, e a velocidade de processamento é fundamental nesses casos.

5. Vamos observar na prática

Criaremos uma tabela para testes chamada decimals

CREATE TABLE decimals (
  n INT,
  d1 DECIMAL(10, 2),
  d2 FLOAT, -- 4 bytes
  d3 DOUBLE -- 8 bytes
);

INSERT INTO decimals
VALUES
(1, 100.40, 100.40, 100.40),
(1, -80.00, -80.00, -80.00);

SELECT sum(d1), sum(d2), sum(d3) FROM decimals GROUP BY n;
Enter fullscreen mode Exit fullscreen mode

Ao executar o SELECT vamos ter o seguinte resultado

sum(d1) sum(d2) sum(d3)
20.40 20.400001525878906 20.400000000000006

Nesse exemplo, criamos uma tabela chamada "decimals" com três colunas: "d1" do tipo DECIMAL(10, 2), "d2" do tipo FLOAT e "d3" do tipo DOUBLE. Em seguida, inserimos duas linhas de dados nessa tabela.

Ao realizar a soma dos valores de cada coluna usando a cláusula GROUP BY, podemos observar as diferenças resultantes. A coluna "d1", que utiliza o tipo DECIMAL com precisão fixa de duas casas decimais, apresenta um resultado preciso de 20.40.

No entanto, as colunas "d2" (FLOAT) e "d3" (DOUBLE) demonstram as variações típicas dos números de ponto flutuante. Embora os valores somados sejam teoricamente iguais a 20.40, devido à representação aproximada desses tipos, ocorrem pequenas variações nos resultados. Essas variações podem ocorrer devido a erros de arredondamento ou limitações na precisão dos bits usados para representar os números.

Essas diferenças podem parecer insignificantes, mas em casos que exigem precisão exata, como manipulação de valores monetários, elas podem levar a perdas ou erros nos cálculos financeiros.

6. Conclusão

Exploramos os diferentes tipos de dados decimais no SQL e destacamos a importância de escolher o tipo correto com base nas necessidades específicas. Ao lidar com valores monetários e cálculos que exigem precisão absoluta, é recomendado utilizar tipos decimais de precisão fixa, como DECIMAL ou NUMERIC. Esses tipos garantem resultados consistentes e evitam perdas de valor.

Embora os números de ponto flutuante (float) possam ser vantajosos em determinados cenários, e*les podem introduzir variações nos cálculos* devido à natureza aproximada da representação. É essencial avaliar o contexto e a precisão necessária para evitar problemas de arredondamento.

Top comments (1)

Collapse
 
hivecommunity_ profile image
Hive Community

Muito bom.