Featured image of post Armazenamento de Moeda em Bancos de Dados: Você Deve Usar DECIMAL ou BIGINT?

Armazenamento de Moeda em Bancos de Dados: Você Deve Usar DECIMAL ou BIGINT?

Ao desenvolver um sistema de pagamentos, qual tipo de campo você deve usar para moeda? Este artigo explica por que você nunca deve usar FLOAT e como escolher entre DECIMAL e BIGINT para criar um sistema de armazenamento de moeda de alto desempenho e livre de erros.

Ao desenvolver sistemas de comércio eletrônico ou pagamentos, você já considerou usar FLOAT ou DOUBLE para campos de valor no banco de dados?

Se sim, pare agora mesmo! Seu sistema pode estar perdendo dinheiro secretamente.

Por que os números de ponto flutuante são proibidos em sistemas financeiros? Um erro de precisão de ponto flutuante aparentemente insignificante, acumulado ao longo de grandes volumes de transações e tempo, pode levar a desastres irreversíveis.

Então, o que exatamente devemos usar para armazenar dinheiro?

Por Que o FLOAT é Tóxico Para Sistemas Financeiros?

No mundo da computação, os números são representados em binário. FLOAT (números de ponto flutuante), ao representar certas frações decimais, é na verdade uma “aproximação”. É como tentar cortar um bolo delicado com uma motosserra rudimentar; não importa o quão cuidadoso você seja, algumas migalhas sempre cairão das bordas.

O exemplo clássico é: 0.1 + 0.2 muitas vezes não é igual a 0.3 em um computador. Se você estiver processando milhões de transações, esses pequenos erros de “0.00000000000000004” se acumularão e os livros-razão nunca baterão. Lembre-se:

Quando se trata de dinheiro, qualquer “aproximação” é um desastre.

O Diário Preciso do Contador: As Vantagens do DECIMAL

Se você deseja uma solução exata onde “você tem exatamente o que vê”, DECIMAL é o formato nativo de número de ponto fixo do banco de dados e o padrão da indústria.

O DECIMAL é como o requintado livro-razão nas mãos de um contador; ele separa com precisão números inteiros e decimais, garantindo que 0.1 + 0.2 seja absolutamente igual a 0.3.

A Proporção Áurea da Indústria: DECIMAL(19, 4)

Geralmente, recomendamos o uso de DECIMAL(19, 4):

  • 19: Representa uma capacidade total de 19 dígitos (precisão).
  • 4: Indica a retenção de 4 dígitos após o ponto decimal.

Por que manter 4 casas decimais? Porque, durante os cálculos de juros, taxas de impostos ou taxas de câmbio, as etapas intermediárias frequentemente produzem mais do que 2 casas decimais. Reservar 2 dígitos extras como buffer aumenta a precisão do cálculo, e você pode simplesmente arredondar de acordo com as necessidades do negócio no final.

Essa capacidade é grande o suficiente para você comprar o PIB de várias Terras!

É Suficiente Para Cenários Financeiros do Mundo Real?

Tomando DECIMAL(19, 4) como exemplo:

  • Dígitos inteiros: 15 dígitos
  • Valor máximo: 999.999.999.999.999
  • Conversão em USD: Aprox. 999 Trilhões de USD
Referência Valor
PIB dos EUA Aprox. US $ 27 Trilhões
PIB Global Total Aprox. US $ 105 Trilhões
Riqueza Global Total Aprox. US $ 454 Trilhões

O DECIMAL(19, 4) pode acomodar números que excedem em muito a riqueza global total, sendo perfeitamente suficiente para a grande maioria dos sistemas financeiros.

Limites Máximos de Precisão do DECIMAL Suportados pelos Principais Bancos de Dados

Banco de Dados Precisão Máxima
MySQL / MariaDB 65
PostgreSQL 131072 (dígitos inteiros) + 16383 (dígitos decimais)
SQL Server 38
Oracle 38

A Máquina de Fichas do Arcade: O Método da Menor Unidade BIGINT

Se você busca desempenho máximo, ou se seu sistema tem exigências de simultaneidade ultra-altas como o Stripe ou Alipay, então o BIGINT (método de armazenamento de números inteiros) pode ser a sua melhor escolha.

Essa abordagem é como a máquina de fichas de um fliperama: não importa quanto dinheiro você insira, a máquina o converte na “menor unidade” para armazenamento. Por exemplo:

  • $ 100,50 USD → Armazenado como 10050 (centavos)
  • 100 TWD → Armazenado como 100 (dólares)

Por Que Escolher o BIGINT?

Razão Descrição
Velocidade Ultrarrápida A adição e subtração de números inteiros são especialidades da CPU; o desempenho computacional é geralmente muito mais rápido do que com o DECIMAL.
Eficiência de Espaço Alocação fixa de 8 bytes, altamente adequada para bancos de dados ultra-grandes.

No entanto, a desvantagem é a baixa legibilidade. Ao abrir o banco de dados e observar o número 10050, você precisará dividi-lo mentalmente (ou no seu código) por 100 de modo automático.

O Confronto Final: Como Escolher?

Para decidir qual formato utilizar, podemos levar em consideração a “frequência de consulta” e a “escala do sistema”:

Dimensão de Comparação DECIMAL BIGINT
Legibilidade Excelente (lê diretamente os números) Ruim (necessita de conversão manual)
Velocidade de Computação Normal Extremamente Rápida
Cenários Aplicáveis ERP, sistemas internos de gestão financeira, serviços comuns de E-commerce Negociações de alta frequência, microsserviços gigantescos, APIs do estilo Stripe

Recomendações Pragmáticas

Cenário de Aplicação Campo Recomendado
Lojas virtuais convencionais (E-commerce), ambientes de relatórios internos das empresas corporativas onde contadores operam consultas SQL de maneira primária sobre as auditorias DECIMAL(19, 4)
Soluções arquitetônicas e transações HFT operando a alta velocidade contínua; alta necessidade por requisitos supremos de expansibilidade infraestrutural BIGINT

Resumo Analítico

Para encerrar de maneira clara, de nada importa sua adoção tecnológica de ponta a ponta: a utilização sistêmica do formato FLOAT permanecerá incalculavelmente errada, destrutiva, irresponsável e estritamente amaldiçoada pro resto do cosmo para guardar as moedas das reservas financeiras! Somente com as definições consistentes aos moldes assertivos exatos será concebida a plenitude e segurança monumental sob toda gama das operações fiscais sistêmicas que se mantenham irredutíveis em solidez de granito matemático.

All rights reserved,未經允許不得隨意轉載
Criado com Hugo
Tema Stack desenvolvido por Jimmy