我正在使用以下函数来将字节格式化为更具人类可读性的格式,但它会返回不正确的信息。德尔福格式化字节到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