Array
(
)

SQL SERVER ARREDONDANDO AUTOMATICAMENTE - URGENTE

Andre Fernandes
   - 02 dez 2013

Prezados estou realizando uma operação matemática em uma consulta e o SQLSERVER está arredondando o resultado da
consulta automaticamente... O cálculo que estou fazendo não pode ser arredondado. Como posso fazer? Vejam os exemplos:
Exemplo 01:
DECLARE @NAX DECIMAL(38,31) = 32;
DECLARE @MDX DECIMAL(38,31) = 44.26;
DECLARE @DPX DECIMAL(38,31) = 8.63;
SELECT (((@NAX-@MDX)/@DPX)*8)+40 as XCALC
A consulta retorna o valor 28,635000
EXEMPLO 02:
Tentei realizar a consulta sem a utilização de variáveis para ver se ele retornava algo diferente, porém, foi retornado o mesmo valor
SELECT (((32-44.26)/8.63)*8)+40
A consulta retorna o valor 28,635000
Eu preciso que ele retorne o real valor da operação, sem efetuar arredondamentos. Fiz a operação na calculadora e no excel
e o resultado obtido é 28,63499421
Alguém pode me ajudar?

Faabiianooc
   - 02 dez 2013

Trabalhe com valores float.

#Código

SELECT (((32.000-44.260)/8.630)*8.)+40.00

Isaac Jose
   - 02 dez 2013

o decimal serve porem deve ser 18,3

declare @nax decimal(18,3) = 32
declare @mdx decimal (18,3)=44.26
declare @dpx decimal (18,3)=8.63
select (((@nax-@mdx )/@dpx)*8)+40 as calc

resultado

calc
28.63499420625724218

Andre Fernandes
   - 02 dez 2013

Utilizava o FLOAT, porém tive problemas com arredondamento nas últimas casas decimais quando se tratava de grandes valores... Por isto optei por utilizar o DECIMAL, só que me parece está ocorrendo o mesmo problema...

Sabe me dizer porque o SQLSERVER arredonda o resultado da operação matemática da SQL?

Citação:
Trabalhe com valores float.

#Código

SELECT (((32.000-44.260)/8.630)*8.)+40.00


Faabiianooc
   - 02 dez 2013

Por causa da quantidade de casas decimais que voce informou..

Andre Fernandes
   - 02 dez 2013

Realmente funcionou alterando os parâmetros para 18,3 ....

Quando utilizo DECIMAL(18,3), significa dizer que poderei utilizar 15 casas antes da vírgula e 3 depois (decimais)?
Optei por (38,31) com o propósito de aumentar a quantidade de casas decimais (7 antes da vírgula e 31 depois), mas acho que estou equivocado...

Como funciona estes parâmetros para o DECIMAL?

Citação:
o decimal serve porem deve ser 18,3

declare @nax decimal(18,3) = 32
declare @mdx decimal (18,3)=44.26
declare @dpx decimal (18,3)=8.63
select (((@nax-@mdx )/@dpx)*8)+40 as calc

resultado

calc
28.63499420625724218

Isaac Jose
   - 02 dez 2013


Citação:
Realmente funcionou alterando os parâmetros para 18,3 ....

Quando utilizo DECIMAL(18,3), significa dizer que poderei utilizar 15 casas antes da vírgula e 3 depois (decimais)?
Optei por (38,31) com o propósito de aumentar a quantidade de casas decimais (7 antes da vírgula e 31 depois), mas acho que estou equivocado...

Como funciona estes parâmetros para o DECIMAL?

Citação:
o decimal serve porem deve ser 18,3

declare @nax decimal(18,3) = 32
declare @mdx decimal (18,3)=44.26
declare @dpx decimal (18,3)=8.63
select (((@nax-@mdx )/@dpx)*8)+40 as calc

resultado

calc
28.63499420625724218


sim...

segue para eventuais duvidas... http://msdn.microsoft.com/pt-br/library/ms187746.aspx

Alex Lekao
   - 10 dez 2013

nossa...

nunca tinha pensado nisso... rsrsrsr

valeu, mais uma que aprendi... rsrsr