在iPhone应用程序中本地化货币

时间:2009-06-26 11:23:49

标签: iphone objective-c localization currency

我正在测试我的应用。除非我将语言环境改为德国,否则一切正常。

基本上,您使用本地货币输入2个值,进行计算并返回用户信息。

用户数字输入处理得很好。也就是说,在“Editing Did End”上,执行一个方法,将数字转换为等值的本地货币。因此,如果美国用户输入10000,他们将返回$ 10,000.00。这是代码:

- (NSMutableString *) formatTextValueToCurrency: (NSMutableString *) numberString {


NSNumber *aDouble = [NSNumber numberWithFloat: [numberString floatValue]];
NSMutableString *aString = [NSMutableString stringWithCapacity: 20];
NSLocale *theLocale;


NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];

[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];
theLocale = [NSLocale currentLocale];
[currencyStyle setLocale: theLocale];

[aString appendString: [currencyStyle stringFromNumber:aDouble]];   

[currencyStyle release];

return aString;

}

但是,当我想处理上述货币值以获取用户他/她的信息时,会出现问题。也就是说,应用程序现在需要从$ 10,000.00(或任何货币)获得10000以发送到计算方法。这是代码:

- (float) getValueFromCurrency: (id) sender {

NSNumber *aDouble = [NSNumber numberWithFloat: 0.0];
UITextField *textField = (UITextField *) sender;
NSMutableString *aString= [NSMutableString stringWithCapacity: 20]; 
NSLocale *theLocale;

float result;

NSNumberFormatter *currencyStyle = [[NSNumberFormatter alloc] init];    

[currencyStyle setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyStyle setNumberStyle:NSNumberFormatterCurrencyStyle];

theLocale = [NSLocale currentLocale];

[currencyStyle setLocale: theLocale];
NSLog(@"The locale is %@", currencyStyle.locale.localeIdentifier); 
//Above NSLog looks good because it returns de_DE 

[aString appendString: textField.text];
//The append from text field to string is good also

aDouble = [currencyStyle numberFromString: aString];
//For some reason, nil is returned

result = [aDouble floatValue];

[currencyStyle release];

return result;
}

出于某种原因,美国,英国,日本和爱尔兰的地区很好。

欧洲大陆国家无法使用。

关于如何解决这个问题的任何建议都会很棒。

1 个答案:

答案 0 :(得分:2)

鉴于该代码适用于美国,英国,日本和爱尔兰而非欧洲大陆(德国),我会检查您如何处理数千和小数分离器。

也就是说,在为您的代码工作的国家/地区,数千个分隔符是逗号,小数点是点(句号)。所以10000美元和50美分将是10,000.50。

在欧洲大陆(德国等),成千上万的分隔符是句号(句号),小数分隔符是逗号。所以德国的上述价值将是10.000,50

NSNumberFormatter有两种方法可供您查看: -

  • (NSString *)currencyDecimalSeparator
  • (NSString *)currencyGroupingSeparator

您可以在WIKI(http://en.wikipedia.org/wiki/Decimal_separator)中找到每种格式的国家/地区列表,并测试您的问题是否只针对一个群组。

我希望有所帮助。

干杯,

凯文