以下是我现在如何获得货币符号的代码:
NSLocale *lcl = [[[NSLocale alloc] initWithLocaleIdentifier:@"au_AU"] autorelease];
NSNumberFormatter *fmtr = [[[NSNumberFormatter alloc] init] autorelease];
[fmtr setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmtr setLocale:lcl];
NSLog( @"%@", [lcl displayNameForKey:NSLocaleCurrencySymbol value:@"AUD"] );
NSLog( @"%@", [fmtr currencySymbol] );
两个NSLog都返回“AU $”。正如我从Apple开发文档中所理解的那样,每种货币至少有两个货币符号(这些符号可能是相同的) - 本地(在一个国家内使用。例如澳大利亚的$)和国际货币符号(AU $)对于澳大利亚)。所以,问题是如何获得LOCAL货币符号。有什么想法吗?
提前致谢。
答案 0 :(得分:20)
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setLocale:[NSLocale currentLocale]];
[currencyFormatter setMaximumFractionDigits:2];
[currencyFormatter setMinimumFractionDigits:2];
[currencyFormatter setAlwaysShowsDecimalSeparator:YES];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSNumber *someAmount = [NSNumber numberWithFloat:5.00];
NSString *string = [currencyFormatter stringFromNumber:someAmount];
美国将获得5.00美元,日本将获得5.00欧元,欧洲将获得5.00欧元等。
答案 1 :(得分:12)
此代码段返回区域设置“ja_JP”的货币符号¥(可以是任何其他区域设置)。
NSLocale* japanese_japan = [[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"] autorelease];
NSNumberFormatter* fmtr = [[[NSNumberFormatter alloc] init] autorelease];
[fmtr setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmtr setLocale:japanese_japan];
// Local currency symbol (what you're asking for)
NSString* currencySymbol = [fmtr currencySymbol];
NSLog( @"%@", currencySymbol ); // Prints '¥'
// International currency symbol
NSString* internationalCurrencySymbol = [fmtr internationalCurrencySymbol];
NSLog( @"%@", internationalCurrencySymbol ); // Prints 'JPY'
不幸的是,对于au_AU,你得到AU $作为本地货币符号而不仅仅是$,但这必须是它在iOS上显示的方式。但请注意,为au_AU打印的国际符号不是AU $而是AUD。
答案 2 :(得分:10)
您的代码应该有效,但区域设置标识符是错误的。它应该是“en_AU”。
请参阅“国际化和本地化指南”(https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingLocaleData/InternationalizingLocaleData.html#//apple_ref/doc/uid/10000171i-CH13-SW4)中的“使用区域设置对象”
答案 3 :(得分:9)
它并不理想,因为它不会退出系统,但显然你可以使用 list of current currency symbols * 创建自己的内部表格。由于该列表具有unicode符号,因此只需将Apple的语言环境列表与列表进行匹配即可。
你知道吗,以防苹果提供的那些实际上无法访问。
*注意:链接无意具有权威性,请参阅评论。
答案 4 :(得分:1)
如果需要,您可以创建包含货币的.strings
文件,并使用NSLocalizedString
功能创建本地化货币。像这样:
en.lproj
myApp.strings:
"currencySymbol"="$"
"currencyFormat"="$%lf"
au_AU.lproj
myApp.strings:
"currencySymbol"="$"
"currencyFormat"="$%lf"
ja_JP.lproj
myApp.strings:
"currencySymbol"="¥"
"currencyFormat"="¥%lf"
并像这样使用:
NSString *money = [NSString stringWithFormat:@"%@%lf", NSLocalizedString:(@"currencySymbol"), myMoney];
但是,这意味着对于您支持的每个本地化,您都需要一个.strings
文件。此外,这意味着对于某些本地化,货币符号不足以显示正确的货币格式,您需要使用以下内容:
NSString *money = [NSString stringWithFormat:NSLocalizedString(@"CurrencyFormat"), myMoney];
这有一些限制,但它可能适合你。
答案 5 :(得分:1)
Swift版本,代码改编自Valentyn的答案(在 Swift 4.1 上测试):
func formattedCurrency(amount: Double, locale: Locale) -> String? {
let formatter = NumberFormatter()
formatter.locale = locale
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
formatter.alwaysShowsDecimalSeparator = true
formatter.numberStyle = .currency
return formatter.string(from: NSNumber(value: amount))
}
它提供了不错的结果,尽管它并没有为所有语言环境正确地改变货币符号的位置,尽管原始答案中写了什么。但这就是Apple希望它成为的样子,就这样吧。
澳元显示为原始问题查询,为" $ 1.50"。
答案 6 :(得分:0)
你可以获取当前字符串并删除所有a-Z字符吗? 如果得到的字符串长度> 0然后你就有了你的符号。否则使用原始字符串。
这很俗气,我不确定这是否适用于全球所有货币,但它可能有效?