Fórum Erro is not a valid floating value #612994

06/10/2020

0

Boa tarde,
Uso Delphi Rio com Interbase 2017.
Em um form tenho um StringGrid, neste StringGrid multiplico os valores das celulas das colunas 1 e 2 e retorno o resultado na coluna 3 com uma variável "total" tipo Real. Após isto tenho implementado um for que soma os valores os valores desta coluna 3 e deveria mostrar em um Edit o SubTotal desta soma. Mas quando ele vai somar os valores da coluna 3 apresenta o seguinte erro: "total" is not a valid floating value. Já debuguei e não encontro onde está dando este erro.
Se vocês puderem me auxiliar, agradeço desde já.
Segue código:

procedure TfrmOutrosCustosOrcamentos.StringGrid1SetEditText(Sender: TObject;
  ACol, ARow: Integer; const Value: string);
var total, quant, valor: real; ValorTotal:Real; i :integer;
begin
 if ACol = 1 then
 begin
 quant:= strtoFloat(StringGrid1.Cells[1,ARow]);
 valor:= strtofloat(StringGrid1.Cells[2,ARow]);
 total:= quant * valor;
 StringGrid1.Cells[3,ARow]:= floatToStr(total);
 end;

  if ACol = 3 then
  begin
  for i:=0 to StringGrid1.RowCount -1 do
  ValorTotal:= ValorTotal + StrToFloat(StringGrid1.Cells[3,i]);
  edit1.Text:= FloattoStr(ValorTotal);
  end;
end;

Devnator

Devnator

Responder

Posts

06/10/2020

Emerson Nascimento

Renato, não seria mais simples trabalhar com dbGrid ? Com ela você associa um dataset que trata de campos nos formatos pertinentes, sem a necessidade de ficar fazendo conversão de conteúdo.

uma sugestão seria verificar o separador de decimais. talvez ele esteja causando problema no cálculo.

veja qual o resultado disto:
var
	total, quant, valor: real;
	ValorTotal: real;
	i: integer;
begin
	if (ACol = 1) or (ACol = 2) then
	begin
		quant := StrToFloatDef( StringGrid1.Cells[1,ARow],0 ); // troquei por StrToFloatDef()
		valor := StrToFloatDef( StringGrid1.Cells[2,ARow],0 ); // troquei por StrToFloatDef()
		total := (quant * valor);
		StringGrid1.Cells[3,ARow]:= FloatToStr(total);

		for i := 0 to StringGrid1.RowCount -1 do
			ValorTotal := ValorTotal + StrToFloatDef(StringGrid1.Cells[3,i],0); // troquei por StrToFloatDef()
		edit1.Text := FloatToStr(ValorTotal);
	end;
end;
Responder

Gostei + 0

06/10/2020

Devnator

Obrigado pela resposta Emerson. Fiz as alterações como você mencionou, mas encontrei o erro na inicialização da variável "i". Estava iniciando ela em 0 e a linha 0 recebe o titulo da coluna alterei e funcionou, completei com o StrToFloatDef para os casos de campos vazio.

E respondendo sua dica de utilizar o DBGrid, essa foi minha primeira idéia, mas como carrego dados de uma tabela e após o preenchimento do usuário em uma das colunas salvo em outra tabela acabei desistindo do uso do DBGrid e optando pelo StringGrid que chegou ao resultado esperado pelo cliente.

Mais uma vez agradeço seu tempo e disposição.
Responder

Gostei + 0

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

Aceitar