我需要計算我的安裝程序中所有組件的總大小。由於一些自定義代碼,我無法使用Inno的內部功能。如何在Inno Setup中定義Single-Type變量中的小數位數量?
問題在於組件共享大量文件。所以我爲包含它們使用的文件變量的每個組件定義了一個字符串。然後我將這些字符串添加到單個字符串中,如果在此字符串中找到某個變量,則以字節爲單位的文件大小將添加到類型爲「single」的變量「size」中。 最後,「尺寸」顯示安裝需要多少空間。
其實這個工作得很好,但我想在下一頁顯示GB的大小。 但是函數FloatToStr在小數點後面添加了很多數字,而我只想要兩個。
這裏的腳本(在最後行出現問題):
function NextButtonClick(CurPageID: Integer): Boolean;
var
size: Single;
if (CurPageID = wpSelectDir) then //I have swapped the Components and SelectDir pages
begin
size := 0; //this will contain the size in the end
xg := ''; //this is the string which contains the list of files needed by every single component
for I := 0 to GetArrayLength(ComponentArray) - 1 do
if IsComponentSelected(ComponentArray[I].Component) then
begin
xg := xg + ComponentArray[I].GCF;
end;
// here the files are being added to the string, everything's working as intended..
MsgBox(xg, mbInformation, MB_OK); //this is for testing if the string has been created correctly
if Pos('gcf1', xg) > 0 then size := size + 1512820736; //here the Pos-function searches for the given string and if it is found it adds the value to "size", ok...
if Pos('gcf2', xg) > 0 then size := size + 635711488;
if Pos('gcf3', xg) > 0 then size := size + 286273536;
size := size/1024/1024/1024; // now all sizes have been added and the number is converted to be displayed GB, not bytes
// Format('%.2n', [size]);
// size := (round(size * 10)/10)
// size := Format('%.2n', [size]);
//FloatToStr(size);
MsgBox(FloatToStr(size), mbInformation, MB_OK); // Here the size is shown but with several unneeded places after the decimal point (2.267589569092)
end;
end;
正如你所看到的,我試過幾件事情來擺脫的數字。問題是MsgBox中的FloatToStr函數,它會自動添加所有數字。如果我爲「大小」選擇Integer類型,它仍然會顯示長數字,但是我不能在MsgBox中使用Integer和IntToStr(這可以解決問題),因爲這裏處理的數字太大,我想要兩位小數在點之後。
我也嘗試將格式化功能放入MsgBox,但我也遇到類型不匹配錯誤。
Inno不支持FloatToStrF。
事先使用FloatToStr轉換「size」並截斷它並不能很好地工作,因爲編譯器會檢查Type「size」被聲明爲,並堅持在MsgBox中再次使用FloatToStr。
我不知道如何將這個數字加起來。也許一些不同的方法可以幫助?
我期待着您的回答!
哇,非常感謝!我錯誤地使用了格式化功能,但現在起作用了!但我仍在努力理解第二個函數是如何工作的......請你解釋一下這個問題嗎? – user1662035
@ user1662035對不起,我認爲代碼本身就是可以說明的。如果你想弄明白這是如何工作的,你可能需要調試它並逐步運行它。在第一行放置breakpint(F5),一旦它停止安裝程序的執行,您可以繼續執行(F8),同時通過將鼠標光標懸停在腳本的名稱上來檢查變量值。 – jachguate
經過第二次瞥見我得到它,但什麼是KFactor?它沒有被聲明... – user1662035