2011-08-20 46 views
1

要上傳一個分數到遊戲中心,他們要求你有一個類型爲int64_t的值。如何分配一個浮點數到一個int64_t

有沒有辦法簡單地將我的float轉換爲int64_t

我已經構建了我的整個遊戲圍繞得分,我需要一個簡單的解決方案任何想法?

+0

你需要C語言的解決方案嗎?你的浮動有多大(你想轉換的最大值是多少)? – osgx

+0

Objective-c和數字不是很大,他們只是有decimels –

+0

可能重複[如何將一個浮點數轉換爲一個int在目標C?](http://stackoverflow.com/questions/286756/how- do-i-convert-a-float-to-an-int-in-objective-c) – osgx

回答

0

如果你的浮標在尺寸有限的(小於9,223,372,036,854,775,807),轉換

int64_t myInt = (int64_t) myFloat; 

如果你想「拯救」小數,可以縮放結果(乘浮10或100):

int64_t myInt_scaled = (int64_t) (myFloat * 100.0); 
+0

謝謝! int64_t支持分支嗎? –

+0

不,int64_t只是整數;所以要保存幾位小數,你應該縮放你的浮點數。 – osgx

0

您需要將float轉換爲int64_t,然後檢查溢出。此演員陣容將截斷數字,即5.655將變爲5.

try { 
     score = (int64_t)floatScore; 
    } 
    catch(OverflowException e) { 
     // Print error 
    } 
1

我會對此進行一次刺探。其他人的回答(來自http://www.cocos2d-iphone.org/forum/topic/14839

每個分數都必須以int64形式提交。所以你需要轉換你的浮點數以匹配你的排行榜的設置。因此,在固定的3 dp中,您需要將float乘以1000以獲得第三個dp到 int - 然後提交。

所以

的int64_t gcScore =(的int64_t)(得分* 1000.0f);

gkscore.value = gcScore;

隨着一些四捨五入的玩法,確保提交什麼 是什麼也已經顯示給玩家 - 我們有一些 在GC和遊戲顯示時有問題 - 只是 必須經過每個顯示屏&將得分值轉換爲 確保他們注意正確顯示。

所有對排行榜設置的更改似乎都需要一段時間,並且 提交的分數通常也不會顯示出來。遊戲 中心沙箱是坦率的說實話。一旦你上線, 會更好地響應新的分數,但是你不能對排行榜格式的 進行任何更改,所以你必須堅持在沙盒中才能得到 它是正確的。

相關問題