带有一些小数分隔符的NSString到NSNumber

时间:2012-03-20 07:47:55

标签: objective-c ios decimal nsnumber nsnumberformatter

我正在构建的应用程序有可能“下载”文本文件并从那里获取数字。在模拟器中一切都很完美,但是当我在设备上测试它时它就崩溃了。过了一会儿,我发现问题出在十进制分隔符上。在该文件中,我使用了.,我的iPhone的本地设置需要,。该字符串的示例:

Product 1;100.00
Product 2;82.85
Product 3;95.12
//etc...

将前几个.更改为,后,我可以成功运行该应用,直到它到达第一个.,这就是问题所在。

我可以轻松地以编程方式将所有.替换为,但是我希望此应用可以在任何数字格式的国家/地区使用,而不是限制在特定市场

我用来获取这些数字的代码:

NSString *fileContents = [[NSUserDefaults standardUserDefaults]objectForKey:theKey];
NSArray *allLinedStrings = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSMutableArray *allStringNormalized = [NSMutableArray array];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
for (int i = 0; i < allLinedStrings.count; i++) {
    NSString *bla = [allLinedStrings objectAtIndex:i];
    NSArray *bla1 = [bla componentsSeparatedByString:@";"];
    [allStringNormalized addObject:[formatter numberFromString:[bla1 objectAtIndex:1]]];
}
self.values = [NSArray arrayWithArray:allStringNormalized];

任何帮助都将不胜感激。

谢谢:)

1 个答案:

答案 0 :(得分:3)

如果我正确理解了问题,您希望NSNumberFormatter始终使用.作为小数点分隔符,而不管手机的区域设置如何。解决方案很简单:使用setDecimalSeparator:的实例方法setCurrencyDecimalSeparator:NSNumberFormatter将小数点分隔符设置为.

请注意,您无需设置两个小数分隔符。如果setDecimalSeparator:numberStyle NSNumberFormatterDecimalStylesetCurrencyDecimalSeparator: numberStyleNSNumberFormatterCurrencyStyle,则{{1}}使用{{1}}。

有关详细信息,请参阅the documentation