Ajuda - Busca - Membros - Calendário
Versão Completa: (resolvido) Como Tratar O Erro "is Not Valid Floating Point Value
Fórum Script Brasil > Programação & Desenvolvimento > Delphi, Kylix
--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;

Micheus
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:
CODE
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
Jhonas
a mensagem "is not valid floating point value".

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

CODE
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:

CODE
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

CODE
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;
--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,
--MXVinícius --
Prezados,

Eu fiz assim:

CODE
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:

CODE
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.

--MXVinícius --
Prezados consegui fazer o código.

Era questão de lógica simples.


Vejam como ficou:


CODE
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!
Micheus
QUOTE(--MXVinícius -- @ 02/11/2007 - 16:14) *
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. wink.gif

QUOTE(--MXVinícius -- @ 05/11/2007 - 13:58) *
Prezados consegui fazer o código.

Era questão de lógica simples.

Vejam como ficou:
CODE
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:
CODE
...
  if  DBEdit52.text = '' then
  begin
    DBEdit52.SetFocus;    // <======== AQUI
    raise Exception.Create('O Campo para o código do vendedor está vazio');
  end;
...


Abraços
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.