Guest --vagner -- Postado Outubro 25, 2008 Denunciar Share Postado Outubro 25, 2008 olá pessoal, como faço para somar todas as linhas de uma coluna de uma stringgrid?os valores são neste formato:0,00 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 26, 2008 Denunciar Share Postado Outubro 26, 2008 olá pessoal, como faço para somar todas as linhas de uma coluna de uma stringgrid?vagner, a resposta está neste outro post.Qualquer dúvida extra, poste aqui.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --vagner -- Postado Outubro 26, 2008 Denunciar Share Postado Outubro 26, 2008 deu um erro: "is not a valid floating point value" Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 27, 2008 Denunciar Share Postado Outubro 27, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Outubro 27, 2008 Denunciar Share Postado Outubro 27, 2008 Boa tarde Micheus, agora me perdi todo.Obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 27, 2008 Denunciar Share Postado Outubro 27, 2008 Boa tarde Micheus, agora me perdi todo.Vamos ver se achamos você. :DO 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --vagner -- Postado Outubro 28, 2008 Denunciar Share Postado Outubro 28, 2008 Bom dia, não esta somando.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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 28, 2008 Denunciar Share Postado Outubro 28, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --vagner -- Postado Outubro 30, 2008 Denunciar Share Postado Outubro 30, 2008 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest --vagner --
olá pessoal, como faço para somar todas as linhas de uma coluna de uma stringgrid?
os valores são neste formato:
0,00
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
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.