![]() |
Problem mit Prozentrechnung beim Kopieren
Hallo,
ich habe folgenden Code zum Kopieren einer Datei mit Progressbar: ( ![]()
Delphi-Quellcode:
Mit der Zeile:
procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
var FromF, ToF: file of byte; Buffer: array[0..4096] of char; NumRead: integer; FileLength: longint; begin AssignFile(FromF, Source); reset(FromF); AssignFile(ToF, Destination); rewrite(ToF); FileLength := FileSize(FromF); with Progressbar1 do begin Min := 0; Max := FileLength; while FileLength > 0 do begin BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead); FileLength := FileLength - NumRead; BlockWrite(ToF, Buffer[0], NumRead); Position := Position + NumRead; Label1.Caption := IntToStr((100 * Position) div Max); //<========= Application.ProcessMessages; end; CloseFile(FromF); CloseFile(ToF); end; end;
Delphi-Quellcode:
will ich mir den aktuellen Kopier-Prozentsatz anzeigen lassen.
Label1.Caption := IntToStr((100 * Position) div Max); //<=========
Es wird auch was berechnet - aber es kommen teilweilse positive als auch negative Prozentwerte raus. Ich hab schon an mir selbst gezweifelt ob ich jetzt schon zu blöd bin Prozent zu rechnen, aber ich habe in meiner Formel eigentlich keinen Fehler. Vielleicht könnt ihr mir helfen. Ich möchte eigentlich, neben der Progressbar, die Anzeige auch als Prozent von 0% --> 100% angezeigt haben. |
Re: Problem mit Prozentrechnung beim Kopieren
Ohne es mir jetzt genauer angeguckt zu haben, evtl. sprengt 100*position den Wertebereich eines Integer. Mache erst / und dann *
|
Re: Problem mit Prozentrechnung beim Kopieren
Zitat:
Habs auch schon auf Real-Ebene probiert - geht auch nicht |
Re: Problem mit Prozentrechnung beim Kopieren
setze doch mal einen bedingten haltepunkt, der anhält, sobald du eine negative prozentzahl erhälst und schaue dann, mit welchen werten er gerechnet hat. damit kannst du dir schonmal die frage beantworten, ob er mit falschen werten rechnet oder ob die werte den rahmen des datentyps sprengen.
aeno |
Re: Problem mit Prozentrechnung beim Kopieren
1. Rechnen
2. Runden
Delphi-Quellcode:
Gruß,
Label1.Caption := IntToStr(Round(Position / Max * 100)) + ' %';
ManuMF |
Re: Problem mit Prozentrechnung beim Kopieren
Zitat:
Jetzt gehts! Bin wohl ans Ende vom Integer gekommen. |
Re: Problem mit Prozentrechnung beim Kopieren
Na das gleiche habe ich dir doch auch gesagt ^^
|
Re: Problem mit Prozentrechnung beim Kopieren
|
Re: Problem mit Prozentrechnung beim Kopieren
... Na ja, aber Round ist doch FALSCH... (Obwohl der Unterschied minimal ist)
Round benutzt das 'Bankersrounding', sodass bei X.5 auf die nächste GERADE Zahl gerundet wird. Das ist uncool.
Delphi-Quellcode:
Besser ist diese Funktion:
...
P := Prozent(815,1000); // P = 82 P := Prozent(825,1000); // P = 82, dabei wäre 83 aber richtig (bei konsequentem Runden) ...
Delphi-Quellcode:
Function AlzPercent (a,b : Integer) : Integer;
Begin Result := Trunc (0.5 + 100.0*a/b); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz