Как преобразовать строку с номером в NSDecimalNumber, у которого есть запятая, а не десятичная точка?

У меня есть интерфейс, дающий мне такие цифры 0000000012345,78

Итак, я понял, как сделать из них номер. Но мне нужно рассчитать с этим номером, и мне действительно нужно десятичное число.

NSNumberFormatter *fmtn = [[NSNumberFormatter alloc] init];
[fmtn setFormatterBehavior:NSNumberFormatterBehavior10_4];
[fmtn setNumberStyle:NSNumberFormatterDecimalStyle];
[fmtn setDecimalSeparator:@","];
NSNumber *test = [fmtn numberFromString:@"0000000012345,78"];

Как я могу сделать NSNumber NSDecimalNumber?

EDIT: Это код, в котором я закончил:

NSDictionary *localeDict = [NSDictionary dictionaryWithObject:@"," forKey:@"NSDecimalSeparator"];
NSDecimalNumber *test = [[NSDecimalNumber alloc] initWithString:@"00000000012345,78" locale:localeDict];

Как соединить словарь locale не может быть описан как "хорошо документированный", и мне понадобилось несколько поисковых запросов, чтобы найти пример.

Это тоже работало:

NSLocale *deLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"de"];
NSDecimalNumber *testd = [NSDecimalNumber decimalNumberWithString:@"00000000012345,78" locale:deLoc];

Ответы

Ответ 1

Чтобы преобразовать NSNumber в NSDecimalNumber, не было бы лишним смысла избегать представления символа в целом с помощью этого кода?

NSNumber* source = ...;

NSDecimalNumber* result = [NSDecimalNumber decimalNumberWithDecimal:[source decimalValue]]; 

Ответ 2

[NSDecimalNumber decimalNumberWithString:@"0000000012345,78"];

Соблюдайте осторожность в отношении языка; если вы запустите этот код на iPhone, чей формат области не настроен на французский, он может не вернуть то, что вы ожидаете. Поэтому вы можете использовать:

+ (NSDecimalNumber *)decimalNumberWithString:(NSString *)numericString locale:(NSDictionary *)locale

вместо.

Ответ 3

Если вы посмотрите NSDecimal Reference Reference, вы увидите, что вы можете создать новый NSDecimalNumber из NSString (с и без локаль), фактические номера и т.д.

Если вы хотите преобразовать NSNumber в NSDecimalNumber, вы можете сделать что-то вроде этого:

NSDictionary *locale = ...;
NSNumber *number = ...;
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString:[number descriptionWithLocale:locale] locale:locale];

Конечно, вам нужно будет правильно создать локаль и т.д., но это упражнение осталось вам (возможно, было бы удобно проверить Ссылка на NSNumber Class, Ссылка на класс NSLocale и Руководство по программированию локалей).