iPhone:如何获得本地货币符号(即"$"不是"AU $")

kov*_*pas 27 iphone formatting currency objective-c

这是我现在如何获得货币符号的代码:

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] );
Run Code Online (Sandbox Code Playgroud)

两个NSLog都返回"AU $".正如我从Apple开发文档中所理解的那样,每种货币至少有两个货币符号(这些符号可能是相同的) - 本地(在一个国家内使用.例如澳大利亚的$)和国际货币符号(AU $)对于澳大利亚).所以,问题是如何获得LOCAL货币符号.有任何想法吗?

提前致谢.

Val*_*sov 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];
Run Code Online (Sandbox Code Playgroud)

美国将获得5.00美元,日本将获得5.00欧元,欧洲将获得5.00欧元等.

  • 对日本来说,¥5.00坦率地说是错误的.5日元约为2 1/2美分.您不显示带有两位小数的日元.5.00美元约为1000日元,显示为¥1,000而不是¥1,000.00.区域设置知道如何正确打印Yen. (2认同)

Jul*_*rgé 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'
Run Code Online (Sandbox Code Playgroud)

不幸的是,对于au_AU,你将AU $作为本地货币符号而不仅仅是$,但这必须是它在iOS上显示的方式.但请注意,为au_AU打印的国际符号不是AU $而是AUD.


Nik*_*Nik 10

您的代码应该有效,但区域设置标识符是错误的.它应该是"en_AU".

请参阅"国际化和本地化指南"中的"使用区域设置对象"(https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingLocaleData/InternationalizingLocaleData.html#//apple_ref/doc/ uid/10000171i-CH13-SW4)


Mat*_*ick 8

它并不理想,因为它不会从系统中出来,但显然你可以使用当前货币符号列表创建自己的内部表*.由于该列表具有unicode符号,因此只需将Apple的语言环境列表与列表进行匹配即可.

你知道吗,以防苹果提供的那些实际上无法访问.

*注意:链接无意具有权威性,请参阅注释.