Jump to content
Fórum Script Brasil
  • 0

(resolvido) Como Tratar O Erro "is Not Valid Floating Point Value


Guest --MXVinícius --

Question

Guest --MXVinícius --

Prezados,

Gostaria de implementar meu código para tratar a mensagem "is not valid floating point value".

O campo é o Quantidade.

O código que tenho até o momento é o seguinte:

procedure TForm1.DBEdit54Exit(Sender: TObject);

var

preço: real;

quant: real;

begin

with DataModule1 do

begin

preço:= TProdPreco.AsFloat;

quant:= StrToFloat(dbedit54.text);

DBEdit154.Text := FloatToStr((quant) * (preço));

//--

Edit51.text:= DBedit51.text;

Edit52.text:= DBedit52.text;

Edit53.text:= DBedit53.text;

end;

end;

sistema2.gif

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Melhor forma é você tratar o conteúdo antes de utilizá-los na operação.

Por exemplo, você pode no OnExit testar se o valor é válido ou inválido:

procedure TForm1.DBEdit1(sender :TObject);
begin
  try
    StrToFloat((Sender as TDBEdit).Text);  // não atribuirá a ninguém o resultado, é apenas para tentar obter o erro
  except
    on E:Exception do
    begin
      E.Message := 'Valor digitado não é válido';
      raise;
    end;
  end;
end;

Com isto você pode atribuir este procedimento de um evento OnExit de um DBEdit para todos os outros envolvidos (que farão a mesma validação) já que está descrito de forma genérica - utilizamos o Sender que é o DBEdtit que gerou o evento.

a idéia é semelhante a deste post

Link to comment
Share on other sites

  • 0

a mensagem "is not valid floating point value".

a mensagem " não é valor de ponto flutuante válido.

preço:= TProdPreco.AsFloat;

quant:= StrToFloat(dbedit54.text);  // erro de "is not valid floating point value".

DBEdit154.Text := FloatToStr(quant * preço);
vamos dizer que o valor do seu dbedit54.text seja '2.345,50' que é uma string ... ao tentar converte-lo para float ocorre o erro porque não é possivel converter o ponto ... para melhor entendimento veja:
procedure TForm1.Button1Click(Sender: TObject);
begin
  preço := 2345.78;  // veja que aqui é ponto e não virgula
  quant := strtofloat('2.000,78'); // erro de "is not valid floating point value".
  result := preço * quant;
  edit3.text := format('%n',[result]);
end;
Obs: format('%n',[valor extendido]) Ex: valor = 2345,56 fica 2.345,56 Uma solução simploria seria retirar o ponto da string para depois fazer a conversão
procedure TForm1.Button2Click(Sender: TObject);
var s : string;
begin
  preço := 345.78;
  S := '2.000,78';
  while Pos('.', S) > 0 do
    delete(s,Pos('.', S),1);

  quant := strtofloat(trim(s));
  result := preço * quant;
  edit3.text := format('%n',[result]);
end;

Edited by Jhonas
Link to comment
Share on other sites

  • 0
Guest --MXVinícius --

Jonas, véi, eu ia perguntar sobre isso aí também e você acabou respondendo antes, obrigado cara.

Micheus, espero sinceramente que você esteja ganhando muito bem como desenvolvedor cara, você saca muito, obrigado.

Vou testar aqui e assim que conseguir, posto o resultado, obrigado

Abraço,

Link to comment
Share on other sites

  • 0
Guest --MXVinícius --

Prezados,

Eu fiz assim:

procedure TForm1.DBEdit51Exit(Sender: TObject);
begin
if dbedit51.Text <> ''then
   begin
   DBEdit51.Enabled:= false;
   end else begin
  raise Exception.Create('O Campo para o código do pedido está vazio');
   DBEdit51.SetFocus;
   end;
end;
E deu certo, ficou bom. Mas no outro código:
procedure TForm1.DBEdit52Exit(Sender: TObject);
begin
  if  DataModule1.TVnddor.Locate('CODIGO', DBEdit52.text, []) then
  begin
  Label113.Caption := DataModule1.TVnddorNome.asstring;
  DBEdit52.Enabled:= false;
end else begin
  SHOWMESSAGE('VENDEDOR não ENCONTRADO');
  DBEdit52.SetFocus;
  end;
end;

Eu não consegui fazer, porque ele faz uma busca e puxa dados da tabela então ele mostra o erro do showmessage quando está vazio e passa pra frente.

Infelizmente tenho de pedir mastigado mesmo, juro que tentei e não consegui.

Link to comment
Share on other sites

  • 0
Guest --MXVinícius --

Prezados consegui fazer o código.

Era questão de lógica simples.

Vejam como ficou:

procedure TForm1.DBEdit52Exit(Sender: TObject);
begin
if  DBEdit52.text = '' then
        begin
        raise Exception.Create('O Campo para o código do vendedor está vazio');
        DBEdit52.SetFocus;
end;
        if  DataModule1.TVnddor.Locate('CODIGO', DBEdit52.text, []) then
        begin
        Label113.Caption := DataModule1.TVnddorNome.asstring;
        end     else begin
                SHOWMESSAGE('VENDEDOR não ENCONTRADO');
                DBEdit52.SetFocus;
        end;
end;

Abraço!

Link to comment
Share on other sites

  • 0
Micheus, espero sinceramente que você esteja ganhando muito bem como desenvolvedor cara, você saca muito, obrigado.
Nem tanto, mas acreditaria se eu disse que é só hobby?!

Em meu emprego oficial, sou apenas usuário. ;)

Prezados consegui fazer o código.

Era questão de lógica simples.

Vejam como ficou:

procedure TForm1.DBEdit52Exit(Sender: TObject);
begin
if  DBEdit52.text = '' then
        begin
        raise Exception.Create('O Campo para o código do vendedor está vazio');
        DBEdit52.SetFocus;
end;
        if  DataModule1.TVnddor.Locate('CODIGO', DBEdit52.text, []) then
        begin
        Label113.Caption := DataModule1.TVnddorNome.asstring;
        end     else begin
                SHOWMESSAGE('VENDEDOR não ENCONTRADO');
                DBEdit52.SetFocus;
        end;
end;
MXVinícius, a título de observação, vale lembrar que tudo o que estiver após um RAISE não será executado. Então, você deve mover o foco para o componente desejado antes de chamar o raise:
...
  if  DBEdit52.text = '' then
  begin
    DBEdit52.SetFocus;    // <======== AQUI
    raise Exception.Create('O Campo para o código do vendedor está vazio');
  end;
...

Abraços

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.7k
×
×
  • Create New...