iPhone:如何从Objective-C中的货币符号字符串中获取数字

tmr*_*ex7 7 formatting nsnumberformatter ios

我试图从带有货币符号的字符串中获取数字(浮点值).

例如.从"¥1,234"到1234从"AU $ 3,456"到3456从"56.78€"到56.78

我尝试了以下代码,但结果是0.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setLenient:YES];
NSNumber *number = [formatter numberFromString:text];
NSDecimalNumber *money = [NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]];
float fval = [money floatValue];
Run Code Online (Sandbox Code Playgroud)

提前致谢!

mar*_*hiz 8


这里的困难在于货币小数分隔符对于不同的国家是不同的.更糟糕的是,某些区域中使用的数字分组符号在其他区域中用作小数分隔符.看到:

http://en.wikipedia.org/wiki/Decimal_mark#Hindu.E2.80.93Arabic_numeral_system

http://en.wikipedia.org/wiki/Decimalisation#Decimal_currency

因此,依赖于小数分隔符的符号,或者使用可疑小数点后的小数位数的天真方法可能不是100%准确.如果您正在处理某个特定的子集,请务必使用某种启发式方法.

但是,考虑到全局问题空间,我认为最好的办法是使用语言环境:

NSString* text =  @"$3,456.78 USD";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
text = [text stringByReplacingOccurrencesOfString:formatter.internationalCurrencySymbol withString:@""];
float fval = [formatter numberFromString:text].floatValue;
Run Code Online (Sandbox Code Playgroud)