O problema de arredondamento no SQL

O SQL possui três funções de arredondamento.

Arredondamento convencional

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

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

Aqui, "[value]" é 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 para baixo. Escolhendo o valor "0" arredonda para valores inteiros. A escolha do valor "-1" é arredondada para o múltiplo dos 10 mais próximos. 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 fixação do terceiro parâmetro por erros tipográficos, em que o número do resultado é truncado em vez de arredondado.

PISO E TETO

O SQL usa a função "FLOOR ()" para forçar o arredondamento para baixo dos valores para o 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 o aparecimento 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 inteiro. Se sua função SQL estiver fornecendo resultados de arredondamento inesperados, verifique se a função "CAST ()" que indica o número tem o tipo de dados "inteiro", "decimal", "money" ou "smallmoney". 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, que são usados ​​para armazenar frações muito pequenas que são arredondadas na maioria das versões do SQL, com a última casa decimal no tipo de dado indicado. Algumas implementações de SQL arredondam para zero, para baixo ou convencionalmente. Quando você recebe dados em um banco de dados SQL que pode estar usando os tipos "real" ou "float", use as funções "CAST ()" ou "CONVERT ()" para convertê-los em tipos de dados "decimais".