Usuário com melhor resposta
T-Sql 2000 - Erro no ROUND

Pergunta
-
Olá a todos. Estou com um problema que tem sido um verdadeiro carma para mim.
Existe uma regra de arredondamento que não está sendo respeitada pelo Sql, e está causando erros no meu programa:
SELECT ROUND(0.035, 2)
A instrução acima deve retornar 0.04, correto.
SELECT ROUND(0.045, 2)
A instrução acima também deveria retornar 0.04, porém, se vc rodá-la, ela retornará 0.05 - ERRADO.
Eu preciso de saber se existe algum service pack ou coisa do tipo que corriga esse bug do T-Sql.
Obrigado.
Jônatas
- - - -
Para efeito de consulta:
Tabela 1: Em conformidade com a Resolução nº 886/66 da Fundação IBGE, o arredondamento é efetuado da seguinte maneira
Condições
Procedimentos
Exemplos
< 5
O último algarismo a permanecer fica inalterado.
53,24 passa a 53,2
> 5
Aumenta-se de uma unidade o algarismo a permanecer.
42,87 passa a 42,9
25,08 passa a 25,1
53,99 passa a 54,0
(i) Se ao 5 seguir em qualquer casa um algarismo diferente de zero, aumenta-se uma unidade no algarismo a permanecer.
2,352 passa a 2,4
25,6501 passa a 25,7
76,250002 passa a 76,3
= 5
(ii) Se o 5 for o último algarismo ou se ao 5 só seguirem zeros, o último algarismo a ser conservado só será aumentado de uma unidade se for ímpar.
24,75 passa a 24,8
24,65 passa a 24,6
24,7500 passa a 24,8
24,6500 passa a 24,6
Fonte: Adaptado de CRESPO, 1991 (http://www.banasmetrologia.com.br/imprime.asp?codigo=1360)
Respostas
-
Tudo bem, mas se eu utilizar o FLOOR ou o CEILING, eles me retornariam valores inteiros, correto? Eu preciso de valores com 2 casas decimais...
Talves se eu criar uma SP para arredondar do jeito que eu preciso resolva, não é?
[]s
Jônatas
-
Todas as Respostas
-
-
Olá Jônatas!!
Pelo que tá escrito, essa é uma regra definida pela fundação IBGE, e não tem relação alguma com a ISO que internacional! Resumindo, arredondamentos diferentes para pares e ímpares? Isso não pode existir.
Ah... e isso não é bug. É conformidade com padrões internacionais.
Sendo assim, vejo que a melhor alternativa é você desenvolver uma função que faça o arredondamento da forma como você deseja.
Se precisar de uma ajuda, retorne aqui.
Abraço
-
Junior,
Aho que isso responde à sua pergunta. Senão, me fale onde eu posso olhar...
SELECT @@VERSION
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 23:18:38 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
Quanto ao CEILING e FLOOR, não entendi qual é a relação com o que eu preciso.
[]s
Jônatas
-
Jônatas,
Perguntei sobre a versão somente por questões de informação.
Sobre este tipo de situação que você esta passando não é um erro, mas sim uma forma de trabalho que o SQL Server utiliza.
Em relação as funções Ceiling e Floor, são funções que também trabalham com arredondamento de valores.
-
-
Jônatas,
Não por que o VB6 é uma ferramenta para desenvolvimento de software, possuí outras regras e definições, já o SQL Server é uma ferramenta para gerenciamento de banco de dados, são ferramentas diferente para funcionalidades diferentes.
-
Tudo bem, mas se eu utilizar o FLOOR ou o CEILING, eles me retornariam valores inteiros, correto? Eu preciso de valores com 2 casas decimais...
Talves se eu criar uma SP para arredondar do jeito que eu preciso resolva, não é?
[]s
Jônatas
-
-