2

アプリをテストしています。ロケールをドイツに変更した場合を除いて、すべて正常に動作しています。

基本的に、現地通貨で 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;
}

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

大陸ヨーロッパ諸国は機能していません。

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

4

1 に答える 1