Problemas com comando IF
Olá gente, estou com um problema, estou implementando um aplicativo e parte do seu código é o seguinte
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
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
Curtidas 0
Respostas
Raylan Zibel
20/07/2016
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.
GOSTEI 0
Luiz Neto
20/07/2016
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.
GOSTEI 0
Huidemar Costa
20/07/2016
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;
GOSTEI 0
Raylan Zibel
20/07/2016
Tente, só pra desencargo de conciencia...
if sumcrit <> 1.0 then begin end;
GOSTEI 0
Luiz Neto
20/07/2016
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.
GOSTEI 0