SQL SERVER ARREDONDANDO AUTOMATICAMENTE - URGENTE

SQL Server

02/12/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?
Andre Fernandes

Andre Fernandes

Curtidas 0

Respostas

Fabiano Carvalho

Fabiano Carvalho

02/12/2013

Trabalhe com valores float.

SELECT (((32.000-44.260)/8.630)*8.)+40.00
GOSTEI 0
Isaac Jose

Isaac Jose

02/12/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
GOSTEI 0
Andre Fernandes

Andre Fernandes

02/12/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?

Trabalhe com valores float.

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


GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

02/12/2013

Por causa da quantidade de casas decimais que voce informou..
GOSTEI 0
Andre Fernandes

Andre Fernandes

02/12/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?

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
GOSTEI 0
Isaac Jose

Isaac Jose

02/12/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?

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
GOSTEI 0
Alex Lekao

Alex Lekao

02/12/2013

nossa...

nunca tinha pensado nisso... rsrsrsr

valeu, mais uma que aprendi... rsrsr
GOSTEI 0
POSTAR