Fórum Problemas com comando IF #559450

20/07/2016

0

Olá gente, estou com um problema, estou implementando um aplicativo e parte do seu código é o seguinte

procedure TfrmAvaliacao.btnWeightsClick(Sender: TObject);
var
  I,j: Integer;
  edt:TIWEdit;
  sumcrit:double;
  aux:string;
begin
  for I := 0 to n_crit - 1 do
  begin
    edt:=TIWEdit(rgnweights.FindComponent('edtCel'+idcrit[i]));
    if edt.Text='' then
    begin
    WebApplication.ShowMessage('Please, fill in the fields with the weights of the criteria');
    Abort;
    end;
    sumcrit:=sumcrit+StrToFloat(edt.Text);
  end;
  if sumcrit<>1 then
  begin
    WebApplication.ShowMessage('The sum of the criteria must be 1');
    Abort;


Nessa passagem, eu desejo que o aplicativo receba os valores inseridos em certos edits, some esses valores na variável sumcrit e desejo que essa soma seja igual a 1. Caso essa condição não seja verificada, deve-se mandar uma mensagem ao usuário e abortar o procedimento. O meu problema é que mesmo em situações onde o valor de sumcrit é igual a 1, o procedimento insiste em entrar no "IF" e abortar o procedimento. Alguem sabe de algo que eu esteja fazendo de incorreto? Obrigado pela atenção
Luiz Neto

Luiz Neto

Responder

Posts

20/07/2016

Raylan Zibel

Você declarou essa variavel "sumcrit", com mesmo nome, em outra parte do sistema? Tente inicializar com 0 no inicio da procedure. Depure e confirme se está entrando no For.
Responder

Gostei + 0

20/07/2016

Luiz Neto

Essa variável só é declarada nesse procedure e mais em canto nenhum, mesmo assim tentei inicializa-lo com 0 e mesmo assim continua entrando no if. Estou achando isso bem estranho pois quando debbugo posso ver que no momento da verificação o valor de sumcrit é exatamente 1 porém continua entrando no if.
Responder

Gostei + 0

20/07/2016

Huidemar Costa

Experimente assim (Colocando o valor 1 em uma variável do tipo double):

procedure TfrmAvaliacao.btnWeightsClick(Sender: TObject);
var
  I,j: Integer;
  edt:TIWEdit;
  um,
  sumcrit:double;
  aux:string;
begin
  for I := 0 to n_crit - 1 do
  begin
    edt:=TIWEdit(rgnweights.FindComponent('edtCel'+idcrit[i]));
    if edt.Text='' then
    begin
    WebApplication.ShowMessage('Please, fill in the fields with the weights of the criteria');
    Abort;
    end;
    sumcrit:=sumcrit+StrToFloat(edt.Text);
  end;
  um := 1; // coloque o valor em uma váriavel
  if sumcrit<>um then
  begin
    WebApplication.ShowMessage('The sum of the criteria must be 1');
    Abort;
Responder

Gostei + 0

20/07/2016

Raylan Zibel

Tente, só pra desencargo de conciencia...

if sumcrit <> 1.0 then
begin

end;
Responder

Gostei + 0

29/07/2016

Luiz Neto

Obrigado pela atenção gente mas o problema foi resolvido. Tive que realizar mudanças no programa para que aquela variável recebesse valores diferentes de 1, então esse if tornou-se inútil, porém antes disso fiz isso que o Raylan sugeriu e não funcionou.
Responder

Gostei + 0

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

Aceitar