AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Byte --> Kb/Mb/Gb

Ein Thema von ByTheTime · begonnen am 8. Aug 2013 · letzter Beitrag vom 9. Aug 2013
Antwort Antwort
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#1

Byte --> Kb/Mb/Gb

  Alt 8. Aug 2013, 17:22
Hallo,
ich benutze folgende Routine um Byte(s) in eine für den Anwender schönere Darstellung umzuwandeln:

Delphi-Quellcode:
function FormatByteSize(const bytes: Longint): string;
const
  B = 1; // byte
  KB = 1024 * B; // kilobyte
  MB = 1024 * KB; // megabyte
  GB = 1024 * MB; // gigabyte
begin
  if bytes > GB then
    result := FormatFloat('#.## GB', bytes / GB)
  else if bytes > MB then
    result := FormatFloat('#.## MB', bytes / MB)
  else if bytes > KB then
    result := FormatFloat('#.## KB', bytes / KB)
  else
    result := FormatFloat('#.## bytes', bytes);
end;
Ich rechne die Dateigröße mehrerer Dateien zusammen und erhalte "143866884245" Byte. Das sind ~134GB. Allerdings erhalte ich mit der oben aufgeführten Routine 1,99GB.

Ich weiß nich was da schief geht.

Gruß,
Lukas
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Byte --> Kb/Mb/Gb

  Alt 8. Aug 2013, 17:29
LongInt ist nur 4 Byte groß.
Du brauchst für so große Zahlen Int64.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Byte --> Kb/Mb/Gb

  Alt 8. Aug 2013, 18:00
Wenn du die '143866884245' manuell einsetzt sieht man eigentlich schon zur Kompilierzeit die entsprechende Warnung
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Byte --> Kb/Mb/Gb

  Alt 8. Aug 2013, 19:54
oder hier http://www.delphipraxis.net/175158-a...ml#post1217345
  Mit Zitat antworten Zitat
ByTheTime

Registriert seit: 24. Sep 2011
Ort: Frankfurt
297 Beiträge
 
Delphi XE2 Architect
 
#5

AW: Byte --> Kb/Mb/Gb

  Alt 8. Aug 2013, 23:14
Tatsächlich aus LongInt Int64 gemacht und es ging Danke Bernhard
@Günther: Ja, das habe ich jetzt gesehen danke für den Tipp. Hätte ich mal ausprobieren sollen...

Aber jetzt geht ja alles, danke für die Hilfe
Lukas
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

AW: Byte --> Kb/Mb/Gb

  Alt 9. Aug 2013, 01:51
Am Rande, und auch etwas entgegen meines Sprachempfindens:
Byte*10^(3m) = [X]Byte
Byte*2^(10m) = [xbi]Byte
[m := "Magnitudentripel" (SI-Präfix-Schritt)]

also:
byte*1000 = kiloByte (kB)
byte*1024 = kibiByte (kiB)
byte*1000*1000 = MegaByte (MB)
byte*1024*1024 = MebiByte (MiB)
usw.

So ist es quasi-genormt. Ich finde den Wortklang der x-bis grauselig, und ganz durchgesetzt hat sich das bis Dato auch nicht, aber technisch korrekter wäre es.
Quasi, weil es imho von nahezu allen Standardisierungsorganisationen so anerkannt wird, aber eine formelle Norm gibt es glaube ich nicht.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 9. Aug 2013 um 01:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Byte --> Kb/Mb/Gb

  Alt 9. Aug 2013, 06:30
Also ich mache das einfach so...
Delphi-Quellcode:
function FormatDiskSpaceSize(const ASize: Int64): string;
const
  cBinaryPrefixes: array[0..8] of String = ('', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi');
var
  LogValue: Integer;
begin
  LogValue := Floor(Math.LogN(1024, ASize));
  Result := FloatToStrF(ASize / Math.Power(1024, LogValue), ffFixed, 12, 2) + ' ' + cBinaryPrefixes[LogValue] + 'B';
end;
// EDIT:
Quasi, weil es imho von nahezu allen Standardisierungsorganisationen so anerkannt wird, aber eine formelle Norm gibt es glaube ich nicht.
Doch gibt es:
IEC 80000-13:2008
Sebastian Jänicke
AppCentral

Geändert von jaenicke ( 9. Aug 2013 um 06:33 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Byte --> Kb/Mb/Gb

  Alt 9. Aug 2013, 07:28
Nehmt doch einfach die Kilo, Mega... Schreibweise. Die kennt jeder, es gibt keinen Lingualkrebs und hübscher ist es auch (weil die Zahlen auch größer sind). Oder kommt dann etwas anderes heraus, als z.B. beim Explorer?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Byte --> Kb/Mb/Gb

  Alt 9. Aug 2013, 10:52
Meiner Meinung nach hat ein Kilobyte immer noch 1024 Bytes aber sei's drum Wikipedia erklärt's ohne Meinungsmache.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Byte --> Kb/Mb/Gb

  Alt 9. Aug 2013, 12:22
Meiner Meinung nach hat ein Kilobyte immer noch 1024 Bytes
Ich unterscheide, wenn ich etwas schreibe, ob ich z.B. schreibe KB oder KiB. Bei Festplatten schreibe ich, dass sie 1 TB groß ist, aber wenn es um die Daten geht, passen etwa 0,9 TiB drauf.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 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