NSNumberFormatter - 获取货币代码的货币符号

NSNumberFormatter - get currency symbol for currency code

这个问题与 - NSNumberFormatter currency symbol

类似,但没有解决该问题的答案

我正在使用 NSNumberFormatter 来格式化货币值,只要货币是用户区域设置的货币,它就可以正常工作。但我还需要显示可能不是用户区域设置的默认货币的货币值(例如,当当前区域设置为 en_US 时显示 GBP 或当区域设置为 fr_FR 时显示 JPY)。

所以我想使用当前语言环境设置的规则显示这些货币,但我不知道设置货币代码后如何获取货币符号。

例如,这里是 NSNumberFormatter 的配置方式:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.usesGroupingSeparator = YES;
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];

所有这些都是正确的。但是,如果我将货币代码设置为 GBP,如下所示:

currencyFormatter.currencyCode = @"GBP"

我得到以下格式字符串和货币代码正确的地方,但货币符号和国际货币符号不正确。

但对我来说真的很奇怪 stringFromNumber 方法会 return 格式正确的值,使用正确的货币符号但直接访问 currencySymbol 属性 return货币符号不正确。

我需要能够访问货币符号,以便缩小它并移动其基线,使货币符号更小并与文本的其余部分偏移。

有谁知道我是不是做错了什么或者设置货币代码后如何获取货币符号?

您将 currencyCode 强制为 'GPD',但货币样式的其他属性如 symbolinternationalCurrencySymbol、...它们取决于 Locale .检查这个:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.usesGroupingSeparator = YES;
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_UK"];

NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithDouble:123456]]);
NSLog(@"%@", formatter.currencySymbol);
NSLog(@"%@", formatter.currencyCode);
NSLog(@"%@", formatter.internationalCurrencySymbol);

它将打印:

£123,456.00
£
GBP
GBP

然后按照您的方式仅将货币代码编辑为 USD

US3,456.00
£
USD
GBP