Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FormatFileSize (https://www.delphipraxis.net/197295-formatfilesize.html)

Uwe Raabe 28. Jul 2018 10:42

AW: FormatFileSize
 
Ich meine sowas:
Delphi-Quellcode:
var
  _size: Extended;
  orgMode: TRoundingMode;
begin
  _size := 1.0957031;
  orgMode := SetRoundMode(rmDown);
  try
    Assert(FormatFloat('0.##', _size, TFormatSettings.Invariant) = '1.09', 'Abrunden klappt nicht!');
  finally
    SetRoundMode(orgMode);
  end;
end;
Basierend auf dieser Aussage:
Zitat:

Zitat von MicMic (Beitrag 1408944)
da ich nicht weis wie ich mit Format/FormatFloat abrunden kann.

und dieser:
Zitat:

Zitat von KodeZwerg (Beitrag 1408948)
Na da kann Dir geholfen werden, mitSetRoundMode() ist so ein Verhalten steuerbar.


KodeZwerg 28. Jul 2018 11:32

AW: FormatFileSize
 
Da ich mich gleich an Strand klatsche hab ich keine Zeit mehr, aber mein Vorschlag beinhaltet Beispiel Code, wenn man nichts rundet, rundet man nichts. Also wo kommt Round() vor?

Falls ich darauf noch Lust haben sollte, schreibe ich was mit Delphi basierend aus dem Informationen vom Link und nicht basierend auf irgendwas was nicht Round() enthält. Man kann Round() auch in Format() reinbringen...

MicMic 28. Jul 2018 11:55

AW: FormatFileSize
 
Also SetRoundMode behalte ich mal im Hinterkopf. Danke für die Info.
Find jetzt die Zeile "result := Format('%s %s', [FormatFloat('0.##', Floor(100*_size)/100, fs), s]);" passt ganz gut.

KodeZwerg und Uwe Raabe... ich hoffe ihr streitet nicht rum :)

Aber Windows macht wirklich sein eigenes Ding. Abgesehen von der Bezeichnung der Dateigrößen...

308736 Bytes / 1024 = 301,5 (Windows gibt 301 aus) <- Datei System32\wusa.exe
14848 Bytes / 1024 = 14,5 (Windows gibt 14,5 aus) <- Datei System32\wshirda.dll

Mal mit ",5" mal ohne. (im Explorer Ansicht Modus "Liste" oder bei den Datei-Eigenschaften)
Im Modus "Details" (dort ist alles ohne Nachkommastellen) die wusa.exe mit 302 wobei in der Statusleiste dann gleichzeitig 301 steht

Ich gebe jetzt z.B. bei der wusa.exe 301,5 KiB aus.

Schon komisch

Michael

Uwe Raabe 28. Jul 2018 12:47

AW: FormatFileSize
 
Zitat:

Zitat von MicMic (Beitrag 1408954)
KodeZwerg und Uwe Raabe... ich hoffe ihr streitet nicht rum :)

Würde uns doch nicht im Traum einfallen 8-)

KodeZwerg 28. Jul 2018 19:11

AW: FormatFileSize
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1408955)
Zitat:

Zitat von MicMic (Beitrag 1408954)
KodeZwerg und Uwe Raabe... ich hoffe ihr streitet nicht rum :)

Würde uns doch nicht im Traum einfallen 8-)

Seh ich genauso, da Uwe der weit aus Erfahrene Delphi Pro User ist war ich mir Anfangs auch nicht sicher das zu Schreiben. Falls es grob Klang lag es schlicht daran das ich ausser Haus musste und Round() über Format() nicht testen konnte, aber es erscheint mir logisch das ein "SetRoundMode()" kein "SetFormatIrgendWas()" replacement ist. Vielleicht ist es falsch was ich so von mir gebe. Jedenfalls tuts mir leid wenn es falsch rüberkam.

Hab Euch alle lieb.:thumb:

Schokohase 28. Jul 2018 22:35

AW: FormatFileSize
 
Windows 10 zeigt im Explorer als Größe den Wert 302 KB und bei den Eigenschaften 301 KB (308 736 Bytes) an.

Konsistent ist da also anders.

Im Explorer erfolgt die Berechnung mit dem Kaufmännischen Runden und in den Eigenschaften evtl. mit dem Symetrischen Runden.

MicMic 29. Jul 2018 07:50

AW: FormatFileSize
 
Zitat:

Zitat von Schokohase (Beitrag 1408971)
Windows 10 zeigt im Explorer als Größe den Wert 302 KB und bei den Eigenschaften 301 KB (308 736 Bytes) an.

Konsistent ist da also anders.

Im Explorer erfolgt die Berechnung mit dem Kaufmännischen Runden und in den Eigenschaften evtl. mit dem Symetrischen Runden.

Also bei mir rundet Windows ja nach Lust und Laune.
Ich schrieb ja oben wusa.exe und wshirda.dll (mal mit ,5 mal ohne) im selben Ansichtmodus.

(Fette Schrift = Ansicht von Windows in den Eigenschaften)

wshirda.dll: Größe = 14848 / 1024 = 14,5 (14,5) Diff. 0
wusa.exe: Größe = 308736 / 1024 = 301,5 (301) Diff. 0,5

Also Windows10 rundet (bei der gleichen Ansicht) bei der wshirda.dll nicht, bei der wusa.exe aber schon. Total Sinnfrei. Aber ich mache mir jetzt da kein Kopf mehr mit diesem Programm aus der Garage (*lach). Ich gebe bei beiden Dateien ",5" mit aus.

Michael

himitsu 29. Jul 2018 10:58

AW: FormatFileSize
 
Zitat:

Zitat von MicMic (Beitrag 1408977)
Also Windows10 rundet (bei der gleichen Ansicht) ....

Schonmal was von Bankers Rounding gehört? :roll: Nee, da hätte die letzte Zahl gerade sein müssen, also auch 302. :gruebel:

Und hier rundet er eben nicht auf x Nachkommastellen, sondern auf 3 "sichtbare" Dezimalstellen.

MicMic 29. Jul 2018 12:44

AW: FormatFileSize
 
Zitat:

Zitat von himitsu (Beitrag 1408992)
Zitat:

Zitat von MicMic (Beitrag 1408977)
Also Windows10 rundet (bei der gleichen Ansicht) ....

Schonmal was von Bankers Rounding gehört? :roll: Nee, da hätte die letzte Zahl gerade sein müssen, also auch 302. :gruebel:

Und hier rundet er eben nicht auf x Nachkommastellen, sondern auf 3 "sichtbare" Dezimalstellen.

Ja, 3 Zahlen... das fällt jetzt auf wenn man darauf schaut. Windows zeigt dann auch "1,00 MB" an.
Nur bei den Bytes sind es mal weniger als 3 Zahlen. Naja, 92 Bytes als 92,0 Bytes anzuzeigen wäre dann etwas peinlich :)
Aber vielleicht finde ich ja noch eine 3,25 Bytes Datei *lach

Michael


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.
Seite 3 von 3     123   

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