2013-12-15 161 views
0

這裏是一個很長時間的潛伏者(但仍然是主要吸引程序員)。我環顧四周尋找答案,找不到任何答案。將數組字符串對象轉換爲浮點數

我想從plist中讀取數組,然後將這些對象從字符串轉換爲浮點數。

我正在嘗試的代碼現在聲明NSNumberFormatter,並嘗試讀入並轉換爲float。它不工作,NSLog總是顯示爲0這些值。

這裏是我的代碼,我使用(成功)從Plist讀入陣,和(沒有成功)轉化的字符串彩車:

//Find the Plist and read in the array: 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [docDirectory stringByAppendingPathComponent:kFilename]; 
//Working up til here, the NSLog correctly shows the values of the array 
NSArray *fileArray = [[NSArray alloc] initWithContentsOfFile:filePath]; 

//Turn object in array from string to float 
NSNumberFormatter *format = [[NSNumberFormatter alloc] init]; 
[format setNumberStyle:NSNumberFormatterDecimalStyle]; 
NSNumber *readinVol = [format numberFromString: fileArray [0]]; 
//This line not working, I believe- intended to read-in as an NSNumber, 
//and then convert to float below: 
CGFloat readVol = [readinVol floatValue] * _volFloat; 

所以我的問題是:

如何將存儲在數組中的對象從當前的字符串轉換爲更多可用的浮點數?理想情況下,我喜歡在一個循環中完成所有操作,但也很樂意爲每個循環設置單獨的CGFloats(如readVol)。

在此先感謝您的幫助。

+0

可可的格式化器是敏感的混蛋。如果它不喜歡/識別格式字符串的一個字符,它只會保留並在每次調用中返回'nil'(0,0.0,NULL等)。如果你只需要將一個字符串轉換爲一個浮點數,可以考慮使用C stdlib函數'strtod()'。 – 2013-12-15 22:29:41

+0

如果這些值是浮動的,爲什麼他們在plist中串起來?你可以把數字放在plist中。 – rmaddy

回答

1

NSNumberFormatterDecimalStyle的問題可能是它是區域設置 從屬。例如,用我的德語語言環境,數字1.234,56正確轉換爲 ,但無法轉換1234.56。 所以,你可以設置一個定義的區域設置來解決這個問題:

NSNumberFormatter *format = [[NSNumberFormatter alloc] init]; 
[format setNumberStyle:NSNumberFormatterDecimalStyle]; 
[format setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 

另外,NSStringfloatValue方法,使該字符串 的內容作爲float

float f = [fileArray[0] floatValue]; 

由於CGFloatfloatdouble,具體取決於架構,您可能希望使用doubleValue以確保安全:

CGFloat f = [fileArray[0] doubleValue]; 
+0

超級!你在爲蘋果工作嗎? ;) –

+0

@flexaddicted:No. –

+0

我在開玩笑......無論如何都是很好的答案。 –

相關問題