SQL SERVER ARREDONDANDO AUTOMATICAMENTE - URGENTE

02/12/2013

0

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

Responder

Posts

02/12/2013

Fabiano Carvalho

Trabalhe com valores float.

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

02/12/2013

Isaac Jose

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
Responder

02/12/2013

Andre Fernandes

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


Responder

02/12/2013

Fabiano Carvalho

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

02/12/2013

Andre Fernandes

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
Responder

02/12/2013

Isaac Jose

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
Responder

10/12/2013

Alex Lekao

nossa...

nunca tinha pensado nisso... rsrsrsr

valeu, mais uma que aprendi... rsrsr
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar