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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar