2009-06-26 5 views
2

내 앱을 테스트하고 있습니다. 로케일을 독일로 변경하는 경우를 제외하고 모두 정상적으로 작동합니다.iphone 앱에서 현지화 된 통화

기본적으로 현지 통화로 2 개의 값을 입력하면 계산이 수행되고 사용자는 정보를 다시 가져옵니다.

숫자 입력은 잘 처리됩니다. 즉, "편집 완료"에 해당하는 숫자를 현지 통화로 변환하는 메소드가 실행됩니다. 따라서 미국 사용자가 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 달러 (또는 다른 통화)에서 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; 
} 

어떤 이유로 미국, 영국, 일본 및 아일랜드 로캘은 괜찮습니다.

유럽 대륙 국가가 작동하지 않습니다.

이 문제를 해결하는 방법에 대한 조언은 유용 할 것입니다.

답변

2

코드가 미국, 영국, 일본 및 아일랜드에서는 작동하지만 본토 유럽 (독일)에서는 작동하지 않는다면 수천과 십진 분리자를 어떻게 처리하는지 확인할 수 있습니다.

즉, 코드에서 작동하는 국가에서 수천 개의 분리 기호는 쉼표이며 십진수는 점 (전체 정지)입니다. 따라서 10000 달러와 50 센트는 10,000.50이 될 것입니다.

유럽 본토 (독일 등)의 경우 수천 개의 분리 자 (seperator)가 점 (정 위치)이고 십진수 분리 기호는 쉼표입니다. 그래서 독일에서 위의 값이 될 것이다 10.000,50

NSNumberFormatter 당신이보고 할 수 있습니다 두 가지 방법이 있습니다 : -

  • (있는 NSString *) currencyDecimalSeparator
  • (있는 NSString *) currencyGroupingSeparator

각 형식의 국가 목록을 WIKI (http://en.wikipedia.org/wiki/Decimal_separator)에서 찾을 수 있으며 문제가 한 그룹에만 해당되는지 여부를 테스트 할 수 있습니다.

도움이 되었기를 바랍니다.

건배,

케빈

관련 문제