Sobre Retorno de Função Double

Delphi

21/04/2005

pessoal tenho uma função que me retorna um double...
depurando, na linha em que a função recebe seu resultado, lhe é atribuido [b:bb94bad1ba]0,0013[/b:bb94bad1ba], porém, qdo volto a execução do procedimento que o chamou, seu resultado é apenas [b:bb94bad1ba]0,001[/b:bb94bad1ba]...


Bruno Belchior

Bruno Belchior

Curtidas 0

Respostas

Edilcimar

Edilcimar

21/04/2005

você não está formatando o número em algum local?


GOSTEI 0
Yallebr

Yallebr

21/04/2005

Não. Veja só está dessa forma:
function Chamada(Valor: Double): Double;
var
  Resultado: Double;
begin
  Resultado := (Valor * 5) / 1000; 
  Result := RoundTo(Resultado, -4); // nesse ponto result recebe 0.0013
end;

procedure Chamador;
var
  Resultado: Double;
begin
  Resultado := 5.0;
  Resultado := Chamada(Resultado);    // nesse ponto Resultado recebe 0.001
end;
ou seja o delphi está suprindo algo, ou estou errado...


GOSTEI 0
Edilcimar

Edilcimar

21/04/2005

vc está manipulando result e pegando resultado


GOSTEI 0
Bruno Belchior

Bruno Belchior

21/04/2005

  Resultado := (Valor * 5) / 1000; 
  Result := RoundTo(Resultado, -4); // nesse ponto result recebe 0.0013 
veja bem, aqui eu manipulo o [b:96ca52665a]Resultado[/b:96ca52665a] porém o [b:96ca52665a]Result[/b:96ca52665a] irá recebê-lo...


GOSTEI 0
Edilcimar

Edilcimar

21/04/2005

correto, mas fora da função, no retorno, você está pegando quem result ou resultado?


GOSTEI 0
Bruno Belchior

Bruno Belchior

21/04/2005

o [b:9178eabc81]Result[/b:9178eabc81]...


GOSTEI 0
Edilcimar

Edilcimar

21/04/2005

vc escreveu
Resultado := Chamada(Resultado); // nesse ponto Resultado recebe 0.001

aqui está resultado e não result


GOSTEI 0
Bruno Belchior

Bruno Belchior

21/04/2005

mas esse resultado é uma variável qualquer que recebe o valor da função... veja nessa forma:
function Chamada(Valor: Double): Double; 
var 
  Resultado: Double; 
begin 
  Resultado := (Valor * 5) / 1000; 
  Result := RoundTo(Resultado, -4); // nesse ponto result recebe 0.0013 
end; 

procedure Chamador; 
var 
  VariaVelQualquer: Double; 
begin 
  Resultado := 5.0; 
  VariaVelQualquer := Chamada(Resultado);    // nesse ponto Resultado recebe 0.001 
end;



GOSTEI 0
Edilcimar

Edilcimar

21/04/2005

function Chamada(Valor: Double): Double;
var
Resultado: Double;
begin
Resultado := (Valor * 5) / 1000;
coloque um showmessage
Result := RoundTo(Resultado, -4); // nesse ponto result recebe 0.0013
coloque um showmessage
end;

procedure Chamador;
var
VariaVelQualquer: Double;
begin
Resultado := 5.0;
VariaVelQualquer := Chamada(Resultado); // nesse ponto Resultado recebe 0.001
coloque um showmessage -> aqui você verá que terá o valor de resultado pois você chamou o resultado e não o result
end;


GOSTEI 0
Bruno Belchior

Bruno Belchior

21/04/2005

essa variável resultado não é variável externa mas sim interna de cada procedimento, logo em um não afetará o outro...


GOSTEI 0
Edilcimar

Edilcimar

21/04/2005

qual a resposta que vc teve com os showmessage?


GOSTEI 0
Beppe

Beppe

21/04/2005

Tem coisa muito errada aí, pq (5.0 * 5) / 1000 = 0.025


GOSTEI 0
Edilcimar

Edilcimar

21/04/2005

realmente, eu nem tinha feito as contas


GOSTEI 0
Marco Salles

Marco Salles

21/04/2005

Tem coisa muito errada aí, pq (5.0 * 5) / 1000 = 0.025


realmente, eu nem tinha feito as contas


Meio estranho ne :P :P :P

Mas efetuando contas ou não , vou dar meu palpite. :arrow: :arrow:

:idea: Acho que uma linha de raciocineo pode ser:

correto, mas fora da função, no retorno, você está pegando quem result ou resultado?


Sobre esta linha de raciocineo , Sugiro ao meu amigo [b:08567c9f27]brunovicenteb[/b:08567c9f27]
Que faça um Teste e Post o Resultado Para Nos

O teste e o seguinte , de um [b:08567c9f27]<CTRL F9>[/b:08567c9f27] no seu codigo.. Diga-se alguma das linhas de seu codigo , ficaram sem compilar

Compilar que eu me refiro e aquelas bolinhas [color=blue:08567c9f27]azuizinhas[/color:08567c9f27] que aparece no lado Esquero do código


GOSTEI 0
Bruno Belchior

Bruno Belchior

21/04/2005

Tem coisa muito errada aí, pq (5.0 * 5) / 1000 = 0.025
qto a isso ai, é apenas um exemplo, realmente os valores não são esses, tive de depurar o código e me surpreendi, pq no outro dia, simplesmente funcionou!!!. :?: :?: :?:


GOSTEI 0
Cabelo

Cabelo

21/04/2005

Colega..

Preste mais atenção..

Na verdade você manipula o result dentro da função, nesta linha

Result := RoundTo(Resultado, -4);

Essa função retorna o valor de um double, mas limita o número de casas que seré mostrado..

Quando você debuga, você ainda não usou a formatação do roundto, que você mesmo colocou como quatro..

mostre o inverso, coloque 8 no lugar e faça o teste, perceba que agora dá certo..


GOSTEI 0
Bruno Belchior

Bruno Belchior

21/04/2005

veja dessa forma:
function Chamada(Valor: Double): Double; 
begin 
  Result := RoundTo((Valor * 5) / 1000, -4); // nesse ponto result recebe 0.0013 
end; 

procedure Chamador; 
var 
  VariavelQualquer: Double; 
begin 
  VariavelQualquer:= 5.0; 
  VariaVelQualquer := Chamada(VariavelQualquer);    // nesse ponto Resultado recebe 0.001 
end;



GOSTEI 0
Marco Salles

Marco Salles

21/04/2005

Peq Não me respondeu :cry: :cry: :cry: :cry:


--------------------------------------------------------------------------------

Citação: Tem coisa muito errada aí, pq (5.0 * 5) / 1000 = 0.025



Citação: realmente, eu nem tinha feito as contas



Meio estranho ne :lol: :lol:

Mas efetuando contas ou não , vou dar meu palpite.

Acho que uma linha de raciocineo pode ser:

Citação:
correto, mas fora da função, no retorno, você está pegando quem result ou resultado?


Sobre esta linha de raciocineo , Sugiro ao meu amigo [b:6603913519]brunovicenteb[/b:6603913519]
Que faça um Teste e Post o Resultado Para Nos

O teste e o seguinte , de um <CTRL F9> no seu codigo.. Diga-se alguma das linhas de seu codigo , ficaram sem compilar 


Compilar que eu me refiro e aquelas bolinhas azuizinhas que aparece no lado Esquero do código



GOSTEI 0
Beppe

Beppe

21/04/2005

Que versão do Delphi?


GOSTEI 0
Bruno Belchior

Bruno Belchior

21/04/2005

[quote:8f89741171=´Marco Salles´]Sobre esta linha de raciocineo , Sugiro ao meu amigo brunovicenteb
Que faça um Teste e Post o Resultado Para Nos[/quote:8f89741171]Sim todas as linhas são executadas
Que versão do Delphi?
Delphi 7


GOSTEI 0
POSTAR