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

问题描述

这个问题类似于,但没有解决该问题的答案 - 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”,但货币样式的其他属性为 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

US$123,456.00
£
USD
GBP

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...