Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Kleines mathem. Problem (https://www.delphipraxis.net/100980-kleines-mathem-problem.html)

Tommy1988 6. Okt 2007 13:37


Kleines mathem. Problem
 
hallo, ich habe da ein kleines abr feines Problemchen.

undzwar siehts so aus:
Ich öffne eine Datei via OpenDialog, dann speichere ich die Dateigröße in Kilobyte(!) in einer variablen (Real).
- Angenommen die Datei ust 145 KB klein
Dann habe ich ein SpinEdit, dort trage ich z.b. 50 ein (angabe auch in KB).

145 wird nun durch 50 geteilt.

Mein Code, mal zu ansehen:
Delphi-Quellcode:
var
SpinEditEingabe: Integer
byte, kilobyte, megabyte: Real;
Parts, KBproPart, LetzterPart: Real;
begin
byte := vFileSize(Edit1.Text);
kilobyte := byte / 1024;
megabyte := kilobyte / 1024;
SpinEditEingabe := SpinEdit1.Value;
// rechnung komplett anders um MOD werde ich nicht
// herum kommen
Parts := RundeAufStelle(kilobyte / SpinEditEingabe, 0) - 1;

KBproPart := nSize;
LetzterPart := RundeAufStelle(kilobyte - (Parts * KBproPart), 2);
LetzterPart := LetzterPart * -1;

// x Parts á x KB gesamt, Label1
sLabel1.Caption := Format('%s Part(s) á %s KB und 1 ' +
'Part á %s KB gesamt',
[FloatToStr(Parts), FloatToStr(KBproPart),
FloatToStr(LetzterPart)]);
So, da wird mir dann angezeigt, dass wenn ich die 145 KB teile, X teile á XX KB habe
und dann ein part á YY kb. das YY sollte dann eigebntlich der REST von dem nicht mehr teilbaren da oben sein.

aber ich kriegs nicht hin. MOD funktionert nicht.

Jelly 6. Okt 2007 13:40

Re: Kleines mathem. Problem
 
Nutze erstens mal den Typen Integer (order Int64) um deine Dateigrösse zu speichern. Ein Real ist ein Floatdatentyp, und du wirst keine Dateien haben mit 143,32 Byte.

Und dann kannst du dir die Operatoren mod und div anschauen, denn das ist es was du brauchst. Schlag mal in der Delphi Hilfe nach, da wirst du fündig werden.

Tommy1988 6. Okt 2007 13:41

Re: Kleines mathem. Problem
 
Das ist mir klar ;)

nciht byte, sondern kByte nutze ich.

sieht das denn nicht unschön aus, wenn ich eine datei als 145KB statt 145,49 KB anzeigen lasse?

Ich ändere mal alles flot ab

DeddyH 6. Okt 2007 13:45

Re: Kleines mathem. Problem
 
Für die reine Anzeige kannst Du doch in reellen Zahlen formatieren.
Delphi-Quellcode:
Label.Caption := Format('Dateigröße %.2f kByte',[Groesse_in_Byte / 1024]);

Tommy1988 6. Okt 2007 13:55

Re: Kleines mathem. Problem
 
mein SpinEditChange sieht jetzt so aus:

Delphi-Quellcode:
// Dateigröße
try
byte := GetFileSizeA(sEdit1.Text);
kilobyte := byte div 1024;
megabyte := kilobyte / 1024;
nSize := SpinEdit1.Value;
// rechnung komplett anders um MOD werde ich nicht
// herum kommen. LÖSUNG suchen!
Parts := (kilobyte div nSize);

KBproPart := nSize;
LetzterPart := kilobyte - (Parts * KBproPart);
LetzterPart := LetzterPart;

// x Parts á x KB gesamt, Label1
sLabel1.Caption := Format('%s Part(s) á %s KB und 1 ' +
'Part á %s KB gesamt',
[IntToStr(Parts), IntToStr(KBproPart),
IntToStr(LetzterPart)]);
except
Showmessage('Es ist ein Fehler aufgetreten!');
end;
MOD habe ich zwar noch nicht untergebracht aber es klappt. ich gucke mal obs auch mit sehr großen dateien geht

Tommy1988 6. Okt 2007 13:59

Re: Kleines mathem. Problem
 
Ok, shceint zu klappen ich wüsste nicht wo ich da jetzt noch MOD einbringen sollte..
mit dateien bis von 100kb bis 700 mb gehts mehr hab ich nicht probiert..

wo könnte man denn da MOD einsetzen?

also soweit ich in erinnerung habe ist MOD ja erm..
er guckt wieoft eine zahl in eine andere passt und schneidet den rest ab.

DeddyH 6. Okt 2007 14:01

Re: Kleines mathem. Problem
 
Delphi-Quellcode:
KBproPart := nSize;
LetzterPart := kilobyte - (Parts * KBproPart);
LetzterPart := LetzterPart;
Das hab ich nicht verstanden (rein logisch).
Delphi-Quellcode:
LetzterPart := kilobyte mod nSize;
Und fertig ist die Laube.
Delphi-Quellcode:
sLabel1.Caption := Format('%s Part(s) á %s KB und 1 ' +
'Part á %s KB gesamt',
[IntToStr(Parts), IntToStr(KBproPart),
IntToStr(LetzterPart)]);
Das lässt sich aber auch vereinfachen:
Delphi-Quellcode:
sLabel1.Caption := Format('%d Part(s) á %d KB und 1 ' +
'Part á %d KB gesamt',
[Parts, KBproPart,
LetzterPart]);

Tommy1988 6. Okt 2007 14:04

Re: Kleines mathem. Problem
 
Zitat:

Das lässt sich aber auch vereinfachen:
Ist das verferinerte rein praktisch "schöner" oder "richtiger" ?

DeddyH 6. Okt 2007 14:06

Re: Kleines mathem. Problem
 
In meinen Augen logischer. Wenn Du schon Format benutzt, verwende auch die zum Typ passenden Formatstrings, anstatt sie zu konvertieren.

Kedariodakon 6. Okt 2007 14:11

Re: Kleines mathem. Problem
 
Int( TeilA / TeilB ) * TeilB = Rest :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.
Seite 1 von 2  1 2      

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