Ir para conteúdo
Fórum Script Brasil
  • 0

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


Guest --MXVinícius --

Pergunta

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 para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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;

Editado por Jhonas
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...