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

StringGrid


Guest --vagner --

Pergunta

8 respostass a esta questão

Posts Recomendados

  • 0
deu um erro: "is not a valid floating point value"
vagner, este ocorre quando você está fazendo a conversão com a função StrToFloat, não é mesmo?! E ela é bem bem exclarecedora: '' não é um valor de ponto flutuante válido.

É verdade que naquele exemplo no post mencionado, eu não fiz o tratamento, porém deve ficar sabido que nenhuma string numérica deve ser convertida sem que seu conteúdo seja testando antes, caso contrário, você obterá este erro. Há, ainda, um erro similar no caso de o valor no string não for válido, como no caso de conter letras (por exemplo).

Ou seja, tem que testar, pelo menos, se o valor da célula não está vazio (motivo deste erro) - use algo como:

...
  if Trim(StringGrid1.Cells[1,2]) <> '' then
    valor := StrToFloatTrim(StringGrid1.Cells[1,2]))
  else
    valor := 0.0;  // caso o nulo seja aceito como 0; do contrário gere msg. de erro.
  Total := Total +valor;
...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Micheus, agora me perdi todo.
Vamos ver se achamos você. :D

O relevante com relação a soma das linhas de uma coluna, acretido que você tenha entendido lá do post citado. Vou então, reescrever o exemplo, usando o que citei no post anterior:

var
  IdxRow :Integer;
  Valor,
  Soma :Double;
begin
  Valor := 0;
// o 1º elemento da linha é o header, então começamos de 1 (não de zero)
// da mesma forma, a 4ª coluna corresponde ao item 3, já que a lista começa em 0
  for IdxRow := 1 to StringGrid1.Cols[3].Count -1 do
  begin
    if Trim(StringGrid1.Cols[3].Strings[IdxRow]) = '' then  // se string nulo
      Valor := 0.0
    else
      Valor := StrToFloat(Trim(StringGrid1.Cols[3].Strings[IdxRow]));
    Soma := Soma + Valor;
  end;
  ShowMessage('Valor total da 4ªcoluna: ' +FloatToStr(Valor));
end;

como você vê, usamos uma variável a mais para primeiramente obter o valor da string convetida em número. Neste exemplo, como citei anteriormente, parti do princípio de que uma string nula é assumida como um valor 0 (zero). Mas, não estamos testando se o texto digitado na célula é mesmo numérico (poderia ser digitado algo com caraceteres não numérico). Não sei se você já está trantando isto em algum outro momento.

Será que agora ficou mais claro?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --vagner --

Bom dia, não esta somando.

1b49b7f30196d024ff91f2bc589714a2.jpg

Obrigado.

var
  IdxRow :Integer;
  Valor,
  Soma :Double;
begin
  Valor := 0;
// o 1º elemento da linha é o header, então começamos de 1 (não de zero)
// da mesma forma, a 4ª coluna corresponde ao item 3, já que a lista começa em 0
  for IdxRow := 1 to StringGrid1.Cols[3].Count -1 do
  begin
    if Trim(StringGrid1.Cols[3].Strings[IdxRow]) = '' then  // se string nulo
      Valor := 0.0
    else
      Valor := StrToFloat(Trim(StringGrid1.Cols[3].Strings[IdxRow]));
    Soma := Soma + Valor;
  end;
  ShowMessage('Valor total da 4ªcoluna: ' +FloatToStr(Valor));
end;

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia, não esta somando.
vagner isto ocorreu por desatenção nossa.

Eu adaptei o exemlo do outro post e acabei não mudando a variável a ser mostrada no ShowMessage - deve ser Soma e não Valor.

Como a última linha do StringGrid1 está vazia, a variável Valor contém 0 (zero) ao sair do loop e, conforme nosso if..then, por isto na mensagem ficou com o valor zerado.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --vagner --

Agora sim, Brigadão Micheus.

var
  IdxRow :Integer;
  Valor, Soma :Double;
begin
  Valor:= 0;
  for IdxRow := 1 to StringGrid1.Cols[3].Count -1 do
  begin
    if Trim(StringGrid1.Cols[3].Strings[IdxRow]) = '' then
      Valor := 0.0
    else
      Valor := StrToFloat(Trim(StringGrid1.Cols[3].Strings[IdxRow]));
    Soma := Soma + Valor;
  end;
  ShowMessage('Valor total da 4ªcoluna: ' +FloatToStr(Soma));
end;

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,3k
×
×
  • Criar Novo...