AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Prozentrechnung geht nicht bei grossen Zahlen!?
Thema durchsuchen
Ansicht
Themen-Optionen

Prozentrechnung geht nicht bei grossen Zahlen!?

Ein Thema von snapman · begonnen am 31. Dez 2006 · letzter Beitrag vom 31. Dez 2006
Antwort Antwort
snapman
(Gast)

n/a Beiträge
 
#1

Prozentrechnung geht nicht bei grossen Zahlen!?

  Alt 31. Dez 2006, 00:30
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?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Prozentrechnung geht nicht bei grossen Zahlen!?

  Alt 31. Dez 2006, 00:35
Versuch mal int64 statt Longint.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Neotracer64

Registriert seit: 27. Okt 2004
292 Beiträge
 
Delphi 7 Professional
 
#3

Re: Prozentrechnung geht nicht bei grossen Zahlen!?

  Alt 31. Dez 2006, 00:37
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;
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: Prozentrechnung geht nicht bei grossen Zahlen!?

  Alt 31. Dez 2006, 06:26
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.
  Mit Zitat antworten Zitat
SirTwist

Registriert seit: 28. Sep 2006
198 Beiträge
 
Delphi XE Professional
 
#5

Re: Prozentrechnung geht nicht bei grossen Zahlen!?

  Alt 31. Dez 2006, 11:38
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);
  ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz