问题描述
这个问题类似于,但没有解决该问题的答案 - NSNumberFormatter currency symbol
我正在使用 NSNumberFormatter 来格式化货币值,只要货币是用户所在地区的货币,就可以正常工作。但我还需要显示可能不是用户语言环境的默认货币的货币值(例如,当当前语言环境为 en_US 时显示 GBP,或当语言环境为 fr_FR 时显示 JPY)。
所以我想使用当前locale设置的规则来显示那些货币,但是我不知道设置货币代码后如何获取货币符号。
例如,以下是 NSNumberFormatter 的配置方式:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.usesGroupingSeparator = YES;
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"];
- (lldb) po [currencyFormatter stringFromNumber:[NSNumber numberWithDouble:12.50]]
- 12.50 美元
- (lldb) pocurrencyFormatter.currencySymbol
- $
- (lldb) pocurrencyFormatter.currencyCode
- 美元
- (lldb) pocurrencyFormatter.internationalCurrencySymbol
- 美元
这些都是对的。但是,如果我将货币代码设置为 GBP,如下所示:
currencyFormatter.currencyCode = @"GBP"
我得到以下信息,其中格式化字符串正确且货币代码正确,但货币符号和国际货币符号不正确。
- (lldb) po [currencyFormatter stringFromNumber:[NSNumber numberWithDouble:12.50]]
- 12.50 英镑
- (lldb) pocurrencyFormatter.currencySymbol
- $ - 错了,应该是 £
- (lldb) pocurrencyFormatter.currencyCode
- 美元
- (lldb) pocurrencyFormatter.internationalCurrencySymbol
- USD - 错误,应该是 GBP
但对我来说,stringFromNumber
方法会返回格式正确的值和正确的货币符号,但访问 currencySymbol
属性直接返回错误的货币符号,这对我来说真的很奇怪。
我需要能够访问货币符号,以便我可以将其缩小并移动其基线,以便货币符号更小并与文本的其余部分偏移。
有谁知道我是不是做错了什么,或者在设置货币代码后如何获取货币符号?
解决方法
您强制 currencyCode
为“GPD”,但货币样式的其他属性为 symbol
、internationalCurrencySymbol
、...它们取决于 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
:
US$123,456.00
£
USD
GBP