Sumowanie wartości

0
procedure TForm5.Button2Click(Sender: TObject);
var
i: integer;
suma_godzin: Real;
begin
suma_godzin:=0;
for i:=0 to ListView1.Items.Count-1 do
suma_godzin:=suma_godzin+strtoint(ListView1.Items[i].SubItems[2]);
ShowMessage(FormatFloat('0.00', suma_godzin));
end;

Program mi sie wywala kiedy w kolumnie sa liczby po przecinku (125.00). Wie ktoś jak rozwiązać ten problem?

0

zauwaz ze kropka a przecinek to dwie rozne rzeczy - domyslnie chyba uzywany jest przecinek - sprawdz sam

0

Bo danych żródłowych nie mogę zmienić.
Wiem ale da sie to jakoś obejść?

0

To może inaczej. Jak zamienić kropke na przecinek.
Mam do dodania liczby
124.53
123.41
110.1
Sa np w deugiej kolumnie listboxa jak je dodac?

0
  function StrToInt(const S: string): Integer;

Funkcja służy do konwersji tekstu zapisanego w zmiennej S na liczbę całkowitą - o ile to możliwe

0
var
i: integer;
suma_godzin: double;
begin
suma_godzin:=0;
for i:=0 to ListView1.Items.Count-1 do
suma_godzin:=suma_godzin+strtofloat(ListView1.Items[i].SubItems[2]);
label5.Caption:=floattostr(suma_godzin);
end;

Jak robie strtofloat taki sam blad wyskakuje. "125.50" is not valid floating point value."
Probowałem zmienna suma_godzin jako single, double, real i dalej nic.. grrrr

0

Masz do wyboru:

DecimalSeparator

albo

StringReplace
0

hmmm mozesz pokazac jak to wykorzystac na jakims prostym przykladzie?

0
malboro napisał(a)

hmmm mozesz pokazac jak to wykorzystac na jakims prostym przykladzie?

var s : String;
begin
   s := '125.00';
   s := StringReplace(s, '.', ',', [rfReplaceAll]);
   ShowMessage(s);
end;

F1 nie boli ...

0

no nie boli ale przy pobieraniu wartosci z kolumny listview juz tak..

0
s: string;
c: string;
w: string;
begin
c:='0';
//suma_godzin:=0;
for i:=0 to ListView1.Items.Count-1 do begin
s := ListView1.Items[i].SubItems[2];
s := StringReplace(s, '.', ',', [rfReplaceAll]);
//c:=c+strtoint(s);
end;
label5.Caption:=inttostr(c);

nie działa.. grrrrrrrr

0

A może

DecimalSeparator
0

tez probowalem i nic.

0
malboro napisał(a)
c: string;
//c:=c+strtoint(s); <- ??????????
label5.Caption:=inttostr(c); <- ??????????
0

To jak to policzyć??!!!

0

Na palcach ;P Ty w ogóle nie myślisz malboro. Poza tym straszny leń z ciebie [no respect for lazy :P]
Myśli i dopiero programuj albo daruj sobie [!!!] Ech, masz gotowca i tak pewnie znowu coś Ci nie będzie
działać itd. Tylko że dawno sam powinieneś po wskazówkach stworzyć rozwiązanie, a nie czekać ąz się
ktoś [znowu ja :P] zlituje, prowadząc za rączkę. Poza tym przeocznie modów - wątek chyba do newbie.

var
  S : string;
  I : integer;
  Suma : Real;
begin
  Suma := 0;
  for I := 0 to ListView1.Items.Count - 1 do
  begin
    S := ListView1.Items[I].SubItems[2];
    if Pos('.', S) > 0 then
    begin
      S := StringReplace(S, '.', DecimalSeparator, [rfReplaceAll]);
    end
    else
      if Pos(',', S) > 0 then
      begin
        S := StringReplace(S, ',', DecimalSeparator, [rfReplaceAll]);
      end;
    try
      Suma := Suma + StrToFloat(S);
    except
      MessageBox(Application.Handle, PChar(S + ' nie jest poprawną liczbą!'),
        'malboro to leń!', MB_ICONERROR + MB_OK);
      Exit;
    end;
  end;
  Caption := FloatToStr(Suma);
end;
0
s: string;
suma_godzin : currency;
i: integer;
begin
suma_godzin:=0;

for i:=0 to ListView1.Items.Count-1 do begin
s := ListView1.Items[i].SubItems[2];
s := StringReplace(s, '.', ',', [rfReplaceAll]);
suma_godzin := suma_godzin + StrToFloat(S);
end;
label5.Caption:= FloatToStr(suma_godzin);

cos takiego tez powinno działać

1 użytkowników online, w tym zalogowanych: 0, gości: 1