В моем приложении используются денежные значения, и я хотел бы представить эти значения в валюте и форматах, которые пользователь установил на своем iPhone, однако при тестировании у меня возникли проблемы с немецким форматом EURO.
У меня есть метод, который возвращает десятичное число (для хранения в основных данных) из строки в формате валюты. На самом деле строка была отформатирована другим (похожим) методом с использованием NSlocale.
Я протестировал локали для Великобритании, США, Японии и Германии, пока что только Германия вызвала какие-либо проблемы.
Вот код, передаваемая строка, например: 2,56 €
+ (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' печатается как: -18446912453607470532000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
тогда как во всех других локалях он будет печатать 2,56 для сохранения в Core Data как NSDecimalNumber.