Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rechnen mit integer, int64, Floattostr, inttostr... - Hilfe (https://www.delphipraxis.net/130164-rechnen-mit-integer-int64-floattostr-inttostr-hilfe.html)

Flodding 4. Mär 2009 10:56


Rechnen mit integer, int64, Floattostr, inttostr... - Hilfe
 
Delphi-Quellcode:
procedure ShowMeTheSpace(c: String);
var
Total, Free, dummy: int64;
Genutzt:integer;
Gesammt:integer;
Frei:integer;
AProzent:int64;
begin
if GetDiskFreeSpaceEx(PChar('.\'),dummy,Total,@Free) then
begin
form1.Label1.Caption:=(Format(' Frei:%.1fGB / Ges.:%.1fGB', [Free / 1024 / 1024 / 1024, Total / 1024 / 1024 / 1024]));
Genutzt:=(Total div 1024 div 1024 div 1024) - (Free div 1024 div 1024 div 1024);
Gesammt:=(Total div 1024 div 1024 div 1024);
Frei:=(Free div 1024 div 1024 div 1024);
AProzent:=Genutzt div Gesammt * 100;

form1.Label1.Caption:=FloatToStr(AProzent);
//Prozent:=Prozent div 100 * 134;

//form1.diskusage.Width:= AProzent;
end;
end;
Guten morgen zusammen... in der obenstehenden Funktion wird der Maximale Speicher eines Datenträgers errechnet... dazu auch noch der Freie Platz...
ich hab mir jetzt dazugebaut dass er mir auch sagt wie viel benutzt wird an platz... soweit funktioniert es auch... aber an folgender Stelle bekomme ich keine ausgabe mehr:

Delphi-Quellcode:
form1.Label1.Caption:=FloatToStr(AProzent);
gebe ich stattdessen alle anderen variablen an wie zB. Total, Free, Gesammt,etc dann werden mir alle werte angezeigt...

wer kann helfen?!

ich danke im voraus für jede antwort :)

Satty67 4. Mär 2009 11:07

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
Prozentrechnen kenne ich auch anders:
Delphi-Quellcode:
AProzent:=(Genutzt * 100) div Gesammt;
und aProzent als Fließkommazahl definieren.

und noch ein Edit, dann besser:
Delphi-Quellcode:
AProzent:=(Genutzt * 100) / Gesammt;
und Ausgabe mit Format()

Flodding 4. Mär 2009 12:29

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
Also... ich habe ein Label und ein image übereinander... das image ist ein "laufbalken, der mittels kleiner grafik in rot anzeigt wie viel speicher BENUTZT ist... das image ist 2px breit.

das label ist 134px breit und breiter darf auch das darunterliegende image nicht werden...

in der variable "Gesammt" steht die komplette des datenträgers...

in genutzt steht logischerweise der platz der schon belegt ist auf dem datenträger...

in frei steht der freie speicherplatz des datenträgers...

AProzent soll die prozentzahl sein die der benutzte speicher von der gesammten größe des datenträgers nutzt...

demnach sollte nach dem dreisatz meine rechnung wie folgt aussehen:

Delphi-Quellcode:
(AProzent div 100) * 134
somit sollte ich dann die prozent aud die 134px des images haben...

oder ist da irgendwo ein denkfehler?!

DeddyH 4. Mär 2009 12:58

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
Delphi-Quellcode:
AProzent div 100
Bei jedem Prozentwert unter 100 kommt da 0 bei heraus.

Flodding 4. Mär 2009 13:26

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
ich habe mir jetzt extra die formel zur prozentrechnung besorgt^^

W = Prozentwert -> Breite des Image nach der Berechnung

G = Grundwert -> gewünschte maximale Breite des Images -> 229px (hab umgebaut^^)

p = Prozentsatz -> Prozentwert der den bereits verbrauchten Speicher angibt

100 = 100% -> ja 100% halt...


W = G * (p / 100)


demnach muss ich rechnen:

image1.width = 229 * (AProzent / 100)

das müsste mir doch demnach die Breite des Image liefern oder sehe ich das falsch...

Zitat:

Bei jedem Prozentwert unter 100 kommt da 0 bei heraus.
wie soll ich das sonst berechnen?!

jfheins 4. Mär 2009 16:17

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
Zitat:

Zitat von Flodding

Zitat:

Bei jedem Prozentwert unter 100 kommt da 0 bei heraus.
wie soll ich das sonst berechnen?!

Mit dem Schrägstrich:

AProzent als float definieren und dann:

AProzent:= Genutzt / Gesammt * 100;
form1.Label1.Caption:=FloatToStr(AProzent);
form1.diskusage.Width:= Round(AProzent);

So ähnlich :stupid:

Satty67 4. Mär 2009 16:21

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
3-Satz für Arme
Also unbekannte immer zuerst (beim zusammenstellen des Vergleichs):

Anzeige-Breite zu Maximale Breite entspricht Prozent zu 100%
Code:
??? : W = P : 100   |*W
??? = P * W : 100
=================
x := (P * W) div 100
Beim Arbeiten mit Integer immer Multiplikation vor Division (da Nachkommawerte verloren gehen)

"Rüsselmops" ;-) scheint nicht Copyright geschützt?

Flodding 4. Mär 2009 19:29

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
habs eben grade mal ausprobiert nochmal... funktioniert immernoch nicht richtig... bei meiner festplatte 200Gb scheint es zu funktionieren...

bei einem datenträger mit 8Gb gibt er mir immer nur für AProzent = 6.

ich habs jetzt mit einer statusbar gemacht... breite kann ich ja angeben wie ich will, maxvalue=Gesammt, position=genutzt, das ganze dann smooth und in rot... dahinter ne grüne leiste die 100% hat und jetzt schauts zwar nicht so schön aus wie mit meinen beiden images, aber dafür funktioniert es :)

danke trotzdem nochmal :D

mkinzler 4. Mär 2009 19:36

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
Ich würde die Zwischenwerte genau als Fliesskommazahlen berechnen und erst später das Ergebnis runden

Namenloser 4. Mär 2009 20:18

Re: Rechnen mit integer, int64, Floattostr, inttostr... - Hi
 
Gesamt

Das musste jetzt mal gesagt werden ._.


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