NSNumberFormatter 货币符号

Posted

技术标签:

【中文标题】NSNumberFormatter 货币符号【英文标题】:NSNumberFormatter currency symbol 【发布时间】:2014-07-14 18:08:26 【问题描述】:

我的应用程序允许用户选择各种货币来跟踪支出。 我有一个标签,显示带有货币符号的金额。我正在使用NSNumberFormatterkCFNumberFormatterCurrencyStyle 来格式化金额字符串并将其显示在标签中;

numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.numberStyle = kCFNumberFormatterCurrencyStyle;
numberFormatter.currencyCode = @"EUR";

我的目标是用不同的颜色显示货币符号,所以我使用 NSAttributedString,试图找到符号的范围并为其设置不同的属性。问题是当我初始化属性字符串时格式化程序返回错误的符号:

MLOG(@"internationalCurrencySymbol %@", numberFormatter.internationalCurrencySymbol);
MLOG(@"currencySymbol %@", numberFormatter.currencySymbol);
MLOG(@"currencyCode %@", numberFormatter.currencyCode);

//logs:
//USD
//$
//EUR

但当标签显示在屏幕上时,我看到正确的欧元货币符号:

有人知道如何获取给定货币代码的货币符号吗?

【问题讨论】:

【参考方案1】:

我刚刚测试了您的代码。如果您在按照您的方式定义数字格式化程序后立即运行日志语句,则输出为

@"EUR"
@"€"
@"EUR"

请注意,国际货币符号和货币符号似乎取决于您系统中设置的区域设置。但是您可以像这样轻松更改格式化程序的语言环境:

numberFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"de_DE"];

最好设置currencySymbol。然后,当语言环境是泰国 (@"th_TH") 时,您会得到

numberFormatter.internationalCurrencySymbol   "THB"
numberFormatter.currencySymbol                "฿"
numberFormatter.currencyCode                  "THB"

【讨论】:

您当前的语言环境是什么? 错了。您可以如上所述设置格式化程序的语言环境。 我当然可以。但是,如果用户选择了 AED 货币,您如何找到正确的语言环境?或更异国情调的东西。我不想硬编码货币区域设置地图。 那么就不要设置currencyCode。让语言环境来处理它。在我的示例中,我强制美国系统使用 € 符号。 @purrrminator:Mundi 是对的,正确的做法是设置货币所在国家/地区的语言环境,并且不要触及currencyCodecurrencySymbol。另请参阅-[SKProduct price] 的示例代码。

以上是关于NSNumberFormatter 货币符号的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中使用 NSNumberFormatter 格式化货币输入

NSNumberFormatter paddingPosition 不起作用

使用swift从货币代码中获取货币符号

iOS 从 NSNumberFormatter 字符串中取回值

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

NSNumberFormatter numberFromString 为货币样式格式化程序返回 0