2009-06-26 10 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.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; 
} 

何らかの理由で、米国、イギリス、日本、アイルランドのロケールは問題ありません。

ヨーロッパのヨーロッパ諸国は働いていません。

これを修正する方法についてのアドバイスは素晴らしいと思います。

答えて

2

米国、英国、日本、アイルランドではなく欧州本土(ドイツ)でコードが動作するとすれば、私は何千もの10進数のセパレータをどのように処理しているかを確認します。

つまり、コードで動作する国では、千単位のセパレータがカンマで、小数点がポイント(フルストップ)です。したがって10000ドルと50セントは10,000.50になります。

本土ヨーロッパ(ドイツなど)では、千単位のセパレータがポイント(フルストップ)で、小数点のセパレータはコンマです。だから、ドイツの上の値は以下のようになり10.000,50

NSNumberFormatterは、あなたが見たいかもしれない2つの方法があります: -

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

各形式のWIKI(http://en.wikipedia.org/wiki/Decimal_separator)で国のリストを確認し、問題が1つのグループのみであるかどうかを確認することができます。

私は役立つことを願っています。

乾杯、

ケビン