Erro no Locate de números decimais.

Delphi

25/11/2010

Bom dias amigos,   Estou precisando localizar em uma tabela com valores inteiros o valor de um Edit com valores fracionarios (89,34), estou tentando converter o valor do Edit em inteiro utilizando a função Trunc mas o resultado     Vejam a fórmula que montei.   Function TFCALCULO.LocalizarAngulo:Integer;
var
V, W :Double;
begin
  V:=(StrToFloat(EditAngulo.Text));
  W:=Trunc(V);
  Edit10.Text:=FloatToStr(W);
  if TabAnguloposte.locate('angulo',EditAngulo.text,[]) then
  begin   Edit11.Text:=TabAnguloposte.FieldByName('Pesoposte').AsFloat;
end;
end;     Se algum de vocês puderem me ajudar, desde já eu agradeço.   Atenciosamente.   Valdir Lima
Valdir Lima

Valdir Lima

Curtidas 0

Respostas

Leonardo Xavier

Leonardo Xavier

25/11/2010

qual mensagem de erro ;e apresentada para você no momento da pesquiza?
GOSTEI 0
Valdir Lima

Valdir Lima

25/11/2010

Olá Leonardo,   Desculpa e não ter colocado, o resultado vem em branco, ou seja, o edit que traria o valor inteiro (truncado) retorna vazio.   Abraço.     Valdir
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

25/11/2010

Bom dias amigos,   Estou precisando localizar em uma tabela com valores inteiros o valor de um Edit com valores fracionarios (89,34), estou tentando converter o valor do Edit em inteiro utilizando a função Trunc mas o resultado     Vejam a fórmula que montei.   Function TFCALCULO.LocalizarAngulo:Integer;
var
V, W :Double;
begin
  V:=(StrToFloat(EditAngulo.Text));
  W:=Trunc(V);
  Edit10.Text:=FloatToStr(W);
  if TabAnguloposte.locate('angulo',EditAngulo.text,[]) then
  begin   Edit11.Text:=TabAnguloposte.FieldByName('Pesoposte').AsFloat;
end;
end;     Se algum de vocês puderem me ajudar, desde já eu agradeço.   Atenciosamente.   Valdir Lima

Certo e qual seria o valor apresentado no edit10.text ? Com o valor informado de 89,34?
GOSTEI 0
Valdir Lima

Valdir Lima

25/11/2010

Vamos lá,   Na tabela onde vou fazer o locate existe somente números inteiro tipo 81, 47, 25, 79, etc., o valor 89,34 deveria retornar 89 que é o arredondamento para baixo e se o valor fosse 89,73 deveria retornar 90 que é o arredontamento para cima. Talvéz nem seje a função Trunc a ser utilizada mas se esta função for a mais fácil o valor para sair no Edit10.Text é 89, considerando 89,34 como valor informado, ou seja, retornar só o valor inteiro.     Abraço.     Valdir
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

25/11/2010

Ja tentou fazer assim?

Function TFCALCULO.LocalizarAngulo:Integer;
var
V, W :Double;
begin
  V:=(StrToFloat(EditAngulo.Text));
  W:=Trunc(V);
  Edit10.Text:=FloatToStr(W);
  if TabAnguloposte.locate('angulo',EDIT10.TEXT,[loCaseInsensitive]) then
  begin
  Edit11.Text:=TabAnguloposte.FieldByName('Pesoposte').AsFloat; 
end;
end;

GOSTEI 0
Valdir Lima

Valdir Lima

25/11/2010

Leonardo,   Os sistema continua retornando valores vazios no Edit.Text10, não está convertendo o valor 89,34 para inteiro e eu acho que ele não consegue localizar um valor inteiro na tabela se o valor do Edit10 não estiver convertido.   Te mais,   Valdir
GOSTEI 0
Leonardo Xavier

Leonardo Xavier

25/11/2010

Leonardo,   Os sistema continua retornando valores vazios no Edit.Text10, não está convertendo o valor 89,34 para inteiro e eu acho que ele não consegue localizar um valor inteiro na tabela se o valor do Edit10 não estiver convertido.   Te mais,   Valdir


Valdir ja tentou utilizar o Round?

http://www.delphibasics.co.uk/RTL.asp?Name=Round&ExpandCode1=Yes
GOSTEI 0
Wilson Junior

Wilson Junior

25/11/2010

Utilize assim:
var
  V, W :Double;
begin
  V := StrToFloat( EditAngulo.Text );
  W := Round( V );
  Edit10.Text := FloatToStr( W );
  { ... continue o seu código }


Espero ter colaborado.
GOSTEI 0
Valdir Lima

Valdir Lima

25/11/2010

Leonardo,   Eu tentei utilizar o Round Assim mas o resultado continua em branco.     Function TFCALCULO.LocalizarAngulo:Integer;
var
V, W :Double;
begin
  V:=(StrToFloat(EditAngulo.Text));
  W:=Round(V);
    Edit10.Text:=FloatToStr(W);
  if TabAnguloposte.locate('angulo',EDIT10.TEXT,[]) then
  begin
  Edit11.Text:=TabAnguloposte.FieldByName('Pesoposte').AsString;
end;
end;     Tá difícil     Valdir  
GOSTEI 0
Valdir Lima

Valdir Lima

25/11/2010

Olá Wilson,   Fiz o código com você sugeriu mas também retorna o valor em branco, o que pode estar errado?   Function TFCALCULO.LocalizarAngulo:Integer;
var
V, W :Double;
begin
  V:=StrToFloat(EditAngulo.Text);
  W:=Round(V);
  Edit10.Text:=FloatToStr(W);
  if TabAnguloposte.locate('angulo',EDIT10.TEXT,[]) then
  begin
  Edit11.Text:=TabAnguloposte.FieldByName('pesoposte).AsString;
end;
end;     O sistema não está arredondando.   Att.   Valdir  
GOSTEI 0
Wilson Junior

Wilson Junior

25/11/2010

Faça isto e veja qual o valor está retornando.
var
  V, W :Double;
begin
  V := StrToFloat( EditAngulo.Text );
  ShowMessage( FloatToStr(V) );
  W := Round( V );
  Edit10.Text := FloatToStr( W );
  { ... continue o seu código }


Verifique se está com ponto (89.34) ou vírgula (89,34) o seu EditAngulo, pois deve estar com ",".
Veja também se você não tem nenhum evento no Edit10 ou se mais algum lugar atribui dados ao Edit10.

Espero ter colaborado.
GOSTEI 0
Valdir Lima

Valdir Lima

25/11/2010

Meus agradecimentos ao Leonardo e Wilson pela força,   conforme as orientações de vocês resolvi o problema, o último estava na pontuação do valor, mas já está resolvido.   Abraço     Valdir Lima
GOSTEI 0
POSTAR