Nie przypisuje zmiennej wartości :|

0

Cześć, mam taką sytuację, że chcę powiedzieć, ile procent pliku zostało odczytane. Plik odczytywany jest w pętli bajt po bajcie(tu wszystko ok).
Mam taką sytuację:

//wcześniej jest odczytywanie bajtu do innej zmiennej typu byte
bytesRead:=bytesRead+1;
percentDone:=(bytesRead div size)*100;
form1.doneLabel.Caption:='Wykonano: '+intToStr(percentDone);
application.ProcessMessages;

percentDone to zmienna globalna(najpierw była byte, potem integer i longint - akty rozpaczy)

bytesRead i size jest longint.

Wszystko jest niby pięknie. Size jest, jakie powinno być, bytesRead się zwiększa. Ale percentDone cały czas ma wartość 0!!

Nawet gdy plik ma 100 bajtów, to percentDone zmienia się dopiero wtedy, gdy odczytany zostanie ostatni bajt. Zmienia się na 100.
Cały czas poza tym jest równe zero.
Czemu??

0
percentDone:=(bytesRead div size)*100;

div to dzielenie calkowite [glowa]

0

...czyli

form1.doneLabel.Caption:='Wykonano: '+FormatFloat('0.00',100*bytesRead/size);
0

czyli powinno być

percentDone:=round((bytesRead/size)*100);
0

Ale po co operować na ułamkach, skoro można dalej na całkowitych? Starczy tylko odwrócić kolejność działań:

percentDone:=bytesRead*100 div size;

0

Shit.
Od samego początku chciałem z ROUND, ale coś mnie podkusiło do diva. Przepraszam za swoją głupotę ;)

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