私のアプリは金銭的価値を使用しており、ユーザーがiPhoneに設定した通貨と形式でこれらの値を表現したいのですが、テストすると、ドイツのEURO形式に問題があるようです。
通貨形式の文字列から(コアデータに格納するための)10進数を返すメソッドがあります。文字列は、実際にはNSlocaleを使用した別の(同様の)メソッドによってフォーマットされました。
私は英国、米国、日本、ドイツのロケールでテストしましたが、これまでのところ問題を引き起こしているのはドイツだけです。
コードは次のとおりです。渡される文字列は次のとおりです。2,56€</p>
+ (NSDecimalNumber*)TLCurrencyFormatFromString:(NSString*)strNumber {
NSNumberFormatter *fmtrCurrencyFromStr = nil;
fmtrCurrencyFromStr = [[NSNumberFormatter alloc] init];
[fmtrCurrencyFromStr setFormatterBehavior:NSNumberFormatterBehavior10_4];
[fmtrCurrencyFromStr setLocale:[NSLocale currentLocale]];
[fmtrCurrencyFromStr setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmtrCurrencyFromStr setGeneratesDecimalNumbers:YES];
NSLog(@"Currency Separator: %@", [fmtrCurrencyFromStr decimalSeparator]); //prints a comma
NSLog(@"Currency Code: %@", [fmtrCurrencyFromStr currencyCode]); //prints EUR
int currencyScale = [fmtrCurrencyFromStr maximumFractionDigits];
NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:currencyScale raiseOnExactness:FALSE raiseOnOverflow:TRUE raiseOnUnderflow:TRUE raiseOnDivideByZero:TRUE];
NSDecimalNumber* currencyNumber = [[NSDecimalNumber alloc] initWithDecimal:[[fmtrCurrencyFromStr numberFromString:strNumber] decimalValue]];
NSLog(@"Currency Number = %@", [currencyNumber decimalNumberByRoundingAccordingToBehavior:roundingBehavior]);
return [currencyNumber decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
}
'currencyNumber'変数は次のように出力されます:-18446912453607470532000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
一方、他のすべてのロケールでは、NSDecimalNumberとしてCoreDataに保存するために2.56を出力します。