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:
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
Curtir tópico
+ 0
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:
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.
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
Clique aqui para fazer login e interagir na Comunidade :)