Sobre Retorno de Função Double
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]...
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
Curtidas 0
Respostas
Edilcimar
21/04/2005
você não está formatando o número em algum local?
GOSTEI 0
Yallebr
21/04/2005
Não. Veja só está dessa forma:ou seja o delphi está suprindo algo, ou estou errado...
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;
GOSTEI 0
Edilcimar
21/04/2005
vc está manipulando result e pegando resultado
GOSTEI 0
Bruno Belchior
21/04/2005
Resultado := (Valor * 5) / 1000; Result := RoundTo(Resultado, -4); // nesse ponto result recebe 0.0013
GOSTEI 0
Edilcimar
21/04/2005
correto, mas fora da função, no retorno, você está pegando quem result ou resultado?
GOSTEI 0
Bruno Belchior
21/04/2005
o [b:9178eabc81]Result[/b:9178eabc81]...
GOSTEI 0
Edilcimar
21/04/2005
vc escreveu
aqui está resultado e não result
Resultado := Chamada(Resultado); // nesse ponto Resultado recebe 0.001
aqui está resultado e não result
GOSTEI 0
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
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;
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
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
21/04/2005
qual a resposta que vc teve com os showmessage?
GOSTEI 0
Beppe
21/04/2005
Tem coisa muito errada aí, pq (5.0 * 5) / 1000 = 0.025
GOSTEI 0
Edilcimar
21/04/2005
realmente, eu nem tinha feito as contas
GOSTEI 0
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
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
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..
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
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
21/04/2005
Peq Não me respondeu :cry: :cry: :cry: :cry:
--------------------------------------------------------------------------------
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:
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
--------------------------------------------------------------------------------
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
21/04/2005
Que versão do Delphi?
GOSTEI 0
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 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 7GOSTEI 0