O problema de arredondamento no SQL

O SQL possui três funções que podem arredondar valores para um determinado número de casas decimais. Você pode usar essas funções para resolver vários problemas relacionados ao banco de dados, desde livrar-se de frações de centavo em transações financeiras até regularizar entradas de dados de vários instrumentos científicos. Se você não conhece o SQL, suas funções de arredondamento podem parecer estranhas e causar problemas de adaptação.

Arredondamento convencional

A função “ROUND ()” do SQL pega um valor existente e o arredonda para o número indicado de casas decimais. O formato é o seguinte:

ROUND ([valor], [n], [1]))

Aqui, “[valor]” é um valor decimal e “[n]” é o número de dígitos para os quais o valor deve ser arredondado. Essa função arredonda valores de 0,5 ou mais e valores de 0,49 ou menos. A escolha do valor “0” arredonda para valores inteiros. A escolha do valor “-1” arredonda para o múltiplo mais próximo de 10. O terceiro parâmetro da função “ROUND ()”, “[1]” corta o número com o número indicado de casas decimais, se qualquer valor diferente de zero for escolhido. Uma fonte significativa de problemas inesperados de arredondamento é a correção do terceiro parâmetro por erros tipográficos, para que o número do resultado seja truncado em vez de arredondado.

ASSOALHO E TETO

O SQL usa a função “FLOOR ()” para forçar o arredondamento dos valores para o número inteiro mais próximo e a função “CEILING ()” para arredondar para o valor mais próximo. As duas funções retornam valores inteiros. Mesmo usando um tipo de dados flutuante com um número especificado de casas decimais, essas funções retornam um valor com zeros após a posição decimal.

Tipos de dados recomendados

O motivo mais provável para a ocorrência de erros de arredondamento no SQL é o uso de um tipo de dados inesperado para a expressão numérica na função “ROUND ()” ou o uso de “FLOOR ()” ou “CEILING () “quando você espera obter um tipo de dados decimal em vez de um número inteiro. Se sua função SQL estiver fornecendo resultados inesperados, verifique se a função “CAST ()” que indica o número tem o tipo de dados “número inteiro”, “decimal”, “dinheiro” ou “dinheiro pequeno”. O tipo de dados “decimal” é limitado a apenas 38 dígitos no total, uma limitação que afeta poucas pessoas fora da comunidade científica.

Outros tipos de dados

Existem dois tipos de dados que retornam valores numéricos e que podem causar problemas com a função “ROUND ()”. Eles são os tipos numéricos “real” e “flutuante” no SQL, usados ​​para armazenar frações muito pequenas, arredondadas na maioria das versões do SQL, com a última casa decimal no tipo de dados indicado. Algumas implementações de SQL arredondam para zero, para baixo ou de maneira convencional. Quando você recebe dados em um banco de dados SQL que pode estar usando os tipos “real” ou “flutuante”, use as funções “CAST ()” ou “CONVERT ()” para convertê-los em tipos de dados “decimais”.

Referências

 

Você pode estar interessado:

Deixe um comentário