将数组字符串对象转换为浮点数

时间:2013-12-15 22:26:03

标签: ios objective-c arrays

这里是长期潜伏者(但仍然是主要的程序员)。我已经四处寻找答案,无法找到答案。

我试图从plist中读取数组,然后将这些对象从字符串转换为浮点数。

我现在尝试的代码声明了NSNumberFormatter,并试图读入并转换为浮点数。它不起作用,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)。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

NSNumberFormatterDecimalStyle的问题可能是它是语言环境 依赖。例如,使用我的德语区域设置,转换了数字1.234,56 正确,但1234.56无法转换。 因此,您可以设置已定义的区域设置来解决问题:

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

或者,NSString具有floatValue方法,该方法提供字符串的内容 作为float

float f = [fileArray[0] floatValue];

由于CGFloat可以是floatdouble,具体取决于架构, 您可能希望使用doubleValue安全起见:

CGFloat f = [fileArray[0] doubleValue];