Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prozentrechnung geht nicht bei grossen Zahlen!? (https://www.delphipraxis.net/83319-prozentrechnung-geht-nicht-bei-grossen-zahlen.html)

snapman 30. Dez 2006 23:30


Prozentrechnung geht nicht bei grossen Zahlen!?
 
Hallo,

bin grad dabei ein Verschlüsselungsprog. zu coden und wollte dazu eine Progressbar bauen mit Prozentanzeige.
Der Witz ist: Die Progressbar selber geht wunderbar, allerdings kann ich die Prozente dazu nicht berechnen.

Habe 2 Zahlen: Sourcefile und Destinationfile (in Bytes)

Hier der Code:

Delphi-Quellcode:
var
  fsource,fdest:longint;
  status:real;

begin

......

Form1.progressbar1.Min:=0;
Form1.progressbar1.Step:=1;
Form1.progressbar1.Max:=filesize(source);

repeat
fdest:=filesize(dest) div 10;
fsource:=filesize(source) div 10;
status:=fdest *100 div fsource;

form1.progreslabel.caption:=floattostr(status);
Form1.progressbar1.Position:=filesize(dest);


.......

until Read<> Sizeof(Buffer);
Wenn die Dateien relativ klein sind, funktioniert beides gut, bei Dateien die ein paar hundert MB gross sind, geht die Progressbar wunderbar,
allerdings tritt bei der Ausgabe der Zahl im Progresslabel ein Phänomen auf:
er zählt hoch von 1-10, dann fängt er bei -10!!!! an und geht is +10 wieder hoch, dann springt er auf 20, dann wieder auf -10 usw... total verrückt

(PS: das div 10 habe ich extra eingebaut damit die zahlen kleiner bleiben scheint aber auch nicht zu helfen)

kann mir jemand sagen was da los ist?

Zacherl 30. Dez 2006 23:35

Re: Prozentrechnung geht nicht bei grossen Zahlen!?
 
Versuch mal int64 statt Longint.

Neotracer64 30. Dez 2006 23:37

Re: Prozentrechnung geht nicht bei grossen Zahlen!?
 
Hatte dasselbe Problem. Integer geht ja nur bis 2.147.483.647.

Habe es dann über Real gelöst:

Delphi-Quellcode:
var
Progress   : Int64;
Percent    : Real;

Percent := (i / HexEdit.DataSize) * 100;
Progress := Ceil(Percent);
pbProgress.Position := Progress;

Robert Marquardt 31. Dez 2006 05:26

Re: Prozentrechnung geht nicht bei grossen Zahlen!?
 
Ich liebe es. Alle Jahre wieder kann ich meinen Artikel dazu promoten http://www.delphi-jedi.org/art_bughunt.html
Seit kurzem auch mit Bildern.

SirTwist 31. Dez 2006 10:38

Re: Prozentrechnung geht nicht bei grossen Zahlen!?
 
1. Wieso definierst du "status" als Floatingpoint-Variable, wenn Du dann mit "div" arbeitest statt mit "/"?
2. Warum benutzt Du "status" nicht auch gleich, um den Progressbar anzuzeigen?
3. wenn Du deinen Sourcecode übersichtlicher formatierst, hilfst Du Dir und uns :-)
=> Leerzeichen, Einrücken, Gleichheitszeichen untereinander ausrichten, ...
4. Der Progressbar zeigt doch eh schon eine Prozentzahl an, oder? Dann könntest Du Dir das Progresslabel eigentlich sparen und direkt mit Progessbar.Position := Round(fdest / fsource * 100) arbeiten

Delphi-Quellcode:
var
  fsource, fdest: Cardinal;
  status:        real;
begin

  with Form1.Progressbar1 do begin
    Min := 0; Max := 100;
  end;

  repeat
    fdest  := filesize(dest) div 10;
    fsource := filesize(source) div 10;
    status := fdest / fsource * 100;

    form1.progreslabel.caption := Format('%3f %%', [status])
    Form1.progressbar1.Position := Round(status);
  ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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