Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi [Korrektur] Byte-Werte zwischen den Einheiten umrechnen (https://www.delphipraxis.net/145561-%5Bkorrektur%5D-byte-werte-zwischen-den-einheiten-umrechnen.html)

ChEeTaH 4. Jan 2010 13:10


[Korrektur] Byte-Werte zwischen den Einheiten umrechnen
 
Mein Vorschlag für Byte-Werte zwischen den Einheiten umrechnen:

Delphi-Quellcode:
function TfMain.FileSizeToStr(const ASize: Int64 {für Delphiversionen < 2005 durch Real/Double/Extended ersetzen}; const AUseShortNames: Boolean = true): string;
const
  ShortUnits: Array[0..8] of string = ('Byte', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
  LongUnits: Array[0..8] of string = ('B', 'Kilob', 'Megab', 'Gigab', 'Terab', 'Petab', 'Exab', 'Zettab', 'Yottab');
  Epsilon = 1 / 1024; // Wegen der Fließkommaungenauigkeit sicher nie falsch, verhindert außerdem Anzeigen wie "1024 KB"
var
  Index: Integer;
begin
  if ASize > 0 then  // hinzugefügt
  begin
    Index := Trunc(ln(ASize) / ln(2) / 10 + Epsilon);
    if AUseShortNames then
      Result := Format('%.2f %s', [ASize / (Int64(1) shl (Index * 10)), ShortUnits[Index]])
    else
      Result := Format('%.2f %s%s', [ASize / (Int64(1) shl (Index * 10)), LongUnits[Index], 'yte'])
  end else if AUseShortNames then   // hinzugefügt
    Result := '0 ' + ShortUnits[0]
  else
    Result := '0 ' + LongUnits[0] + 'yte';  // hinzugefügt ende
end;
MfG ChEeTaH

himitsu 4. Jan 2010 13:47

Re: [Korrektur] Byte-Werte zwischen den Einheiten umrechnen
 
selbes Thema ... wurde vor Kurzem schonmal durchgekaut:
Neuen Beitrag zur Code-Library hinzufügen -> Anmerkung zu einem Code-Library-Eintrag
(auch wenn es der Name nicht verrät ... PS: hätte man über Hier im Forum suchenFileSizeToStr entdecken können)

die Berechnung dort ist auch nett:
Object-Pascal / Delphi-Language -> Dateigröße formatieren?

noch was
Sonstige Fragen zu Delphi -> Dateigröße aufteilen in kB, MB,...

und was Neues (wurde im anderem Thread mit erwähnt)
Object-Pascal / Delphi-Language -> Grössenangabe automatische Umwandlung

ChEeTaH 4. Jan 2010 14:26

Re: [Korrektur] Byte-Werte zwischen den Einheiten umrechnen
 
oh sorry hab ich übersehen. Dafür hätte ich kein eigenes Thema eröffnen müssen, da es ja schon welche gibt :)

In keinem der Threads wird aber der Fall abgedeckt, bei dem die Inputgröße = 0 ist ;)
Insofern also ein neuer Bug ;)

MfG ChEeTaH

himitsu 4. Jan 2010 15:03

Re: [Korrektur] Byte-Werte zwischen den Einheiten umrechnen
 
Zitat:

Zitat von ChEeTaH
In keinem der Threads wird aber der Fall abgedeckt, bei dem die Inputgröße = 0 ist ;)
Insofern also ein neuer Bug ;)

bei meinen Codes sollte es da keine Probleme geben :angel:


und keine Sorge ... übersehn tut jeder schnell mal was und so ganz offensichtlich war der Thread nun auch nicht

ChEeTaH 4. Jan 2010 15:53

Re: [Korrektur] Byte-Werte zwischen den Einheiten umrechnen
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von ChEeTaH
In keinem der Threads wird aber der Fall abgedeckt, bei dem die Inputgröße = 0 ist ;)
Insofern also ein neuer Bug ;)

bei meinen Codes sollte es da keine Probleme geben :angel:

Doch, in der Zeile beschwert sich der Compiler:
Delphi-Quellcode:
 Index := Trunc(ln(ASize) / ln(2) / 10 + Epsilon);
Zitat:

Gleitkommadivision durch Null
:angel:

MfG ChEeTaH

himitsu 4. Jan 2010 17:15

Re: [Korrektur] Byte-Werte zwischen den Einheiten umrechnen
 
neee, in meinem eigenem Code hab ich doch diese Logarithmus-Funktionen nicht genutzt
und darum gibt es dort dieses Problem nicht :zwinker:

ChEeTaH 4. Jan 2010 17:36

Re: [Korrektur] Byte-Werte zwischen den Einheiten umrechnen
 
Zitat:

Zitat von himitsu
neee, in meinem eigenem Code hab ich doch diese Logarithmus-Funktionen nicht genutzt
und darum gibt es dort dieses Problem nicht :zwinker:

hoppla, hab vergessen, dass der zweite Code-Snippet nicht von dir ist :oops:
Er steht aber trotzdem in deinem Thread :mrgreen:


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