我正在使用以下函數來將字節格式化爲更具人類可讀性的格式,但它會返回不正確的信息。德爾福格式化字節到GB
//Format file byte size
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;
例子:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(FormatByteSize(323889675684)); //Returns 1.65GB when it should be ~301GB
end;
參考:http://delphi.about.com/od/delphitips2008/qt/format-bytes.htm(作者:扎爾科Gajic)
任何人都可以解釋爲什麼它返回不正確的信息,並且更重要的是知道如何解決它,它返回正確的信息?
您的LongInts溢出,請嘗試Int64。最大長度值= 2147483647,最大int64值= 9223372036854775807 –
@DavidA正確:在函數的第一行加上一個斷點並檢查'bytes'使得它非常清晰!它顯示爲1767128484,而不是323889675684 –
Doh,我怎麼錯過了?非常感謝,我開始覺得我瘋了。 – user3839120