Как преобразовать строку с номером в 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 и Руководство по программированию локалей).