Divisão entre doubles

09/07/2009

0

Olá, bom dia.

Srs., uma colega está com um problema: Ela criou uma procedure que faz a divisão de 2 variáveis do tipo double precision. Quando ela executa o comando, o resultado está truncando o valor. Mas não há nenhum round nem trunc para isso.

Alguém sabe se é alguma configuração do SQL Server, ou se há algo a fazer para não truncar essa divisão?


Greik

Greik

Responder

Posts

09/07/2009

Jair Bg

Boa Tarde, tem como passar o exemplo desta procedure? e se possível alguns dados de referencia para o exemplo...
qual a versão do MSQL?


Responder

10/07/2009

Greik

Caro Jair, boa tarde.


Segue abaixo um exemplo da procedure que não retorna todas as informações:

ALTER PROCEDURE TESTE

AS
DECLARE @V_VRATUAL DOUBLE PRECISION;
DECLARE @V_TESTE DOUBLE PRECISION;
DECLARE @V_1 DOUBLE PRECISION;
DECLARE @V_2 DOUBLE PRECISION;

BEGIN

SET @V_1=1000000
SET @V_2=5001
SET @V_VRATUAL = @V_1 / @V_2;
SET @V_TESTE = @V_VRATUAL;

PRINT(@V_TESTE);
END;

Esse cálculo deveria retornar: 199,96000799840031993601279744051

Como posso fazer?
Muito obrigado.


Responder

10/07/2009

Jair Bg

Boa Tarde voce poderá substituir o DOUBLE PRECISION por NUMERIC(25,9); no caso para nove casas decimais, quantas você precisa?


Responder

10/07/2009

Greik

No caso eu preciso de mais de 15 casas decimais.


Responder

10/07/2009

Jair Bg

Os tipos DECIMAL, NUMERIC e MONEY o agumento de precisão é 30 no máximo, os tipos de dado FLOAT, REAL e DOUBLE PRECISION são como tipos numéricos aproximados. não exatos de precisão variável. conforme suportado pelo processador, sistema operacional o arredondamento pode acontecer se a precisão do número for muito grande.


Responder

11/07/2009

Emerson Nascimento

pra você entender, tente assim:
ALTER PROCEDURE TESTE

AS
DECLARE @V_VRATUAL DOUBLE PRECISION;
DECLARE @V_TESTE DOUBLE PRECISION;
DECLARE @V_1 DOUBLE PRECISION;
DECLARE @V_2 DOUBLE PRECISION;

BEGIN

       SET @V_1=1000000
       SET @V_2=5001.00000000000000000000
       SET @V_VRATUAL = @V_1 / @V_2;
       SET @V_TESTE = @V_VRATUAL;

       PRINT(@V_TESTE);
END;



Responder

11/07/2009

Emerson Nascimento

desculpe... isso funciona no Firebird.
o indicado seria mesmo decimal ou numeric.
ALTER  PROCEDURE TESTE

AS
DECLARE @V_VRATUAL decimal(30,20)
DECLARE @V_TESTE decimal(30,20);
DECLARE @V_1 DOUBLE PRECISION;
DECLARE @V_2 DOUBLE PRECISION;

BEGIN

       SET @V_1=1000000
       SET @V_2=5001
       SET @V_VRATUAL = @V_1 / @V_2;
       SET @V_TESTE = @V_VRATUAL;

       PRINT(@V_TESTE);
END;



Responder

22/10/2009

Greik

Olá Pessoal.

Muitíssimo obrigado a todos.

Att;
Greik.


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