如何从iphone中的货币代码获取货币符号?
我已经从webservice响应中获得货币代码(例如:USD,EUR,INR)。我需要显示相应货币代码的货币符号。如果货币代码是美元,我需要显示$,如果货币代码是EUR,我需要显示€。我怎样才能做到这一点?请提出任何想法或示例代码来做到这一点。请帮帮我。提前致谢。如何从iphone中的货币代码获取货币符号?
此代码的魅力在我的项目。我会分享给大家。
NSString *currencyCode = @"EUR";
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:currencyCode] autorelease];
NSString *currencySymbol = [NSString stringWithFormat:@"%@",[locale displayNameForKey:NSLocaleCurrencySymbol value:currencyCode]];
NSLog(@"Currency Symbol : %@", currencySymbol);
谢谢。
NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
这是美国的货币风格
NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
//[numberFormatter setCurrencySymbol:@"Rs"];
[numberFormatter setNumberStyle:@"en_IN"];
这是印度
感谢您的回复。你能清楚地告诉我吗?我无法理解你的答案。别误会我。谢谢。 – 2012-01-03 13:19:48
此代码是您正在寻找的,但由于语言环境的循环效率不高而效率不高。对于所有货币代码,它仍然正确运行,而不仅仅是欧元或美元。希望这会帮助你。
- (NSLocale *) findLocaleByCurrencyCode:(NSString *)_currencyCode
{
NSArray *locales = [NSLocale availableLocaleIdentifiers];
NSLocale *locale = nil;
for (NSString *localeId in locales) {
locale = [[[NSLocale alloc] initWithLocaleIdentifier:localeId] autorelease];
NSString *code = [locale objectForKey:NSLocaleCurrencyCode];
if ([code isEqualToString:_currencyCode])
break;
else
locale = nil;
}
return locale;
}
- (NSString *)findCurrencySymbolByCode:(NSString *)_currencyCode
{
NSNumberFormatter *fmtr = [[NSNumberFormatter alloc] init];
NSLocale *locale = [self findLocaleByCurrencyCode:_currencyCode];
NSString *currencySymbol;
if (locale)
[fmtr setLocale:locale];
[fmtr setNumberStyle:NSNumberFormatterCurrencyStyle];
currencySymbol = [fmtr currencySymbol];
[fmtr release];
if (currencySymbol.length > 1)
currencySymbol = [currencySymbol substringToIndex:1];
return currencySymbol;
}
使用这种方式:
NSString *currencySymbol = [self findCurrencySymbolByCode:currencyCode];
此代码有一些令人讨厌的缺陷:如果'NSNumberFormatter'决定不将货币符号放在输出中,那么您将得到不正确的结果。如果货币符号恰好占用多个UTF-16码位,它将被切断并且无效 – 2013-10-02 12:05:56
改进它并允许其他人使用。这不是关于这个网站吗? ),谢谢。 – 2013-10-02 12:08:13
确实。改进的答案已发布。 – 2013-10-03 14:42:37
NSLocale
会很乐意告诉你一个特定的语言环境中使用的货币符号:
[locale objectForKey:NSLocaleCurrencySymbol];
它也将告诉你的货币代码:
[locale objectForKey:NSLocaleCurrencyCode];
因此,您现在要做的就是查看与给定代码对应的语言环境。没有内置的方法(我知道)直接执行此操作,因此请遍历所有已知的语言环境并选择匹配的语言环境。 @ Umka的answer在-findLocaleByCurrencyCode:
方法中有一个很好的例子。
您可以通过构建自己的查找表来优化流程,而不是每次遍历所有语言环境。您可能还需要处理重复货币代码的可能性,因此需要采取一些启发式方法来确定哪些是最可能的区域设置。从@Mike阿卜杜拉和@Umka代码
NSNumberFormatter * formatter = [NSNumberFormatter new];
formatter.numberStyle = NSNumberFormatterCurrencyStyle;
NSString * localeIde = [NSLocale localeIdentifierFromComponents:@{NSLocaleCurrencyCode: currencyCode}];
formatter.locale = [NSLocale localeWithLocaleIdentifier:localeIde];
NSString * symbol = formatter.currencySymbol;
大厦,这里是斯威夫特的一些功能。
func findCodeAndSymbolForAllLocales() {
let locales = NSLocale.availableLocaleIdentifiers()
for localeId in locales {
let locale = NSLocale(localeIdentifier: localeId)
if let code = locale.objectForKey(NSLocaleCurrencyCode) as? String,
let symbol = locale.objectForKey(NSLocaleCurrencySymbol) {
print("\(code) \(symbol)")
}
}
}
func findCurrencySymbolByCode(currencyCode:String) -> String? {
guard let locale = findLocaleByCurrencyCode(currencyCode) else {
print("locale for \(currencyCode) is nil")
return nil
}
return locale.objectForKey(NSLocaleCurrencySymbol) as? String
}
func findLocaleByCurrencyCode(currencyCode:String) -> NSLocale? {
let locales = NSLocale.availableLocaleIdentifiers()
var locale:NSLocale?
for localeId in locales {
locale = NSLocale(localeIdentifier: localeId)
if let code = locale!.objectForKey(NSLocaleCurrencyCode) as? String {
if code == currencyCode {
return locale
}
}
}
return locale
}
斯威夫特4版
查找由货币代码的语言环境:
let localeGBP = Locale
.availableIdentifiers
.map { Locale(identifier: $0) }
.first { $0.currencyCode == "GBP" }
print(localeGBP?.currencySymbol) // £
格式化货币
if let locale = localeGBP {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = locale
let result = formatter.string(from: 100000) // £100,000.00
}
斯威夫特
let locale = NSLocale(localeIdentifier: currencyCode)
let currencySymbol = locale.displayName(forKey: .currencySymbol, value: currencyCode) ?? currencyCode
print("Currency symbol: \(currencySymbol)")
我不认为这个代码按需要工作。它仅显示欧元和美元的正确货币符号。对于所有其他货币,它显示货币代码的第一个字符。 – 2012-07-18 08:28:51
这段代码看起来很神奇,不清楚它为什么会这样做。如果您更改第三行以便输出'[locale objectForKey:NSLocaleCurrencySymbol]',则输出将打印'Currency Symbol:¤'。 – dteoh 2014-05-09 01:27:47
此代码只适用于欧元和美元,其他人不适合我。 – 2015-03-17 16:32:43