![]() |
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:
So, da wird mir dann angezeigt, dass wenn ich die 145 KB teile, X teile á XX KB habe
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)]); 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. |
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. |
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 |
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]);
|
Re: Kleines mathem. Problem
mein SpinEditChange sieht jetzt so aus:
Delphi-Quellcode:
MOD habe ich zwar noch nicht untergebracht aber es klappt. ich gucke mal obs auch mit sehr großen dateien geht
// 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; |
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. |
Re: Kleines mathem. Problem
Delphi-Quellcode:
Das hab ich nicht verstanden (rein logisch).
KBproPart := nSize;
LetzterPart := kilobyte - (Parts * KBproPart); LetzterPart := LetzterPart;
Delphi-Quellcode:
Und fertig ist die Laube.
LetzterPart := kilobyte mod nSize;
Delphi-Quellcode:
Das lässt sich aber auch vereinfachen:
sLabel1.Caption := Format('%s Part(s) á %s KB und 1 ' +
'Part á %s KB gesamt', [IntToStr(Parts), IntToStr(KBproPart), IntToStr(LetzterPart)]);
Delphi-Quellcode:
sLabel1.Caption := Format('%d Part(s) á %d KB und 1 ' +
'Part á %d KB gesamt', [Parts, KBproPart, LetzterPart]); |
Re: Kleines mathem. Problem
Zitat:
|
Re: Kleines mathem. Problem
In meinen Augen logischer. Wenn Du schon Format benutzt, verwende auch die zum Typ passenden Formatstrings, anstatt sie zu konvertieren.
|
Re: Kleines mathem. Problem
Int( TeilA / TeilB ) * TeilB = Rest :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 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