Test this code.
If you need to make a calculation with the value, convert back to an extended type variable using the StrToFloat function.
Code:
#define FileSize "D:\Game\Grand Theft Auto V\x64q.rpf"
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[ code]
const
KFactor = $400; {1024}
function FormatBytes(const Bytes: Extended): String;
var
Dms: Array of String;
Amount: Extended;
Idx: Byte;
begin
Dms := ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
Amount := Bytes;
Idx := 0;
while Amount > (0.9 * KFactor) do
begin
Inc(Idx)
Amount := Amount / KFactor;
end;
if Abs(Amount - Trunc(Amount)) < 0.007 {0.07} then
Result := Format('%.0f %s', [Amount, Dms[Idx]])
else
Result := Format('%.2f %s', [Amount, Dms[Idx]]);
end;
function Size64(Hi, Lo: Longint): Extended;
begin
Result := Lo;
if Lo < 0 then
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi := (Hi - 1) downto 0 do
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
end;
function GetFileSize(const FileName: String): Extended;
var
FindRec: TFindRec;
begin
Result := 0;
if FindFirst(FileName, FindRec) then
begin
try
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
finally
FindClose(FindRec);
end;
end;
end;
function FloatToByte(const Bytes: Extended): String;
begin
Result := Format('%.0f', [Bytes])
end;
function InitializeSetup(): Boolean;
var
FileSize: Extended;
begin
FileSize := GetFileSize(ExpandConstant('{#FileSize}'));
MsgBox(FormatBytes(FileSize), mbInformation, mb_OK);
{or use}
MsgBox(FloatToByte(FileSize), mbInformation, mb_OK);
Result := False;
end;