这里是长期潜伏者(但仍然是主要的程序员)。我已经四处寻找答案,无法找到答案。
我试图从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
)。
提前感谢您的帮助。
答案 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
可以是float
或double
,具体取决于架构,
您可能希望使用doubleValue
安全起见:
CGFloat f = [fileArray[0] doubleValue];