2012-11-20 45 views
0

可能重複:
Correcting floating point numbers浮點工作的事情.....大部分時間

float randNum = arc4random()%(100)-1; 

我讀的地方,這會給我1之間的隨機數100。或者接近於此。

這條線似乎一直工作,但我把這個數字轉換成一個NSString存儲/打印到文本,然後將其轉換回一個浮點,以便進行排序和其他計算。但是當我有時會回到浮動狀態時,它看起來像是亂碼;像這樣在變量視圖:

9 float 9.75303731e-41 

爲什麼會轉換成一個NSString和回浮點毀掉我使用的浮點值? (例如,我能怎麼都搞砸了或者我應該使用CGFloat的替代?)

我想這是所有相關代碼:

NSMutableArray *stringArray = [[NSMutableArray alloc] init]; 
floatArray[30]; 
// put three random floats into an NSMutableArray of NSStrings 
for(int i = 0; i < 3; i++) 
{ 
    float randNum = arc4random()%(100)-1; 
    NSString *randString = [NSString stringWithFormat:@"%.3f", randNum]; 
    [stringArray addObject:randString]; 
} 

// convert NSStrings back to float 
for(NSString *string in stringArray) 
{ 
    float temp = [string floatValue]; 
    floatArray[iterator] = temp; 
} 

預先感謝任何幫助/諮詢。

編輯:當我通過代碼時,它看起來像浮點值看起來很理智,直到「float temp = [字符串floatValue]」,這是值似乎是垃圾。

+0

而不是轉換爲NSString,爲什麼不轉換爲NSNumber並將其保存在數組中,然後從NSNumber對象中取回它? – iDev

+0

ACB - 感謝您的建議。我會試試看。 Inafziger - 感謝發佈可能的副本。我會嘗試ACB的建議。 – user990769

+2

你爲什麼要減1? 'arc4random()%(100)'返回一個0-99的數字,所以你應該_add_ 1移至1-100。 – Barmar

回答

1

爲什麼當arc4random()的結果是uint32_t時使用float?切換到整數類型幾乎肯定會解決這一切,因爲我懷疑問題是由於轉換爲字符串形式只允許3位有效數字。如果使用%.15f作爲格式,會發生什麼情況?

旁註:使用arc4random_uniform() - 它更簡單並且保證在該範圍內是均勻的隨機分佈。