2010-11-23 85 views
2

有時我必須從無符號整數值轉換爲浮點值。例如,我的圖形引擎使用浮點數並帶有SetScale(float x, float y, float z),我有一個具有一定大小的對象,如unsigned int。我想將unsigned int轉換爲一個浮點數來正確縮放一個實體(這個例子非常具體,但是我希望你明白了)。Int或Unsigned Int浮動而不會收到警告

現在,我通常做的是:

unsigned int size = 5; 
float scale = float(size); 
My3DObject->SetScale(scale , scale , scale); 

這是很好的做法,在所有的,在一定條件下(見注)?有沒有更好的辦法比float()垃圾代碼?

備註:我無法觸摸圖形API。我必須使用帶有浮點數的SetScale()函數。此外,我也無法觸及大小,它必須是一個unsigned int。我相信還有很多其他例子具有相同的「問題」。以上內容可以應用於任何需要完成的轉換,而作爲程序員的你在這個問題上沒有多少選擇。

回答

9

有一個從unsigned intfloat的隱式轉換,所以劇組是絕對不必要的。

如果您的編譯器發出警告,那麼使用強制轉換來消除警告沒有任何問題。請注意,如果size非常大,則可能無法完全由float表示。

+0

這將會像18歲時那樣在最高設置下對我的編譯器進行欺騙。 – 2010-11-23 23:40:45

9

我更傾向於將使用static_cast

float scale = static_cast<float>(size); 

但你正在做的是功能相當的細膩。