Проверка строк с использованием NSNumberFormatter

#cocoa #nsnumberformatter

#cocoa #nsnumberformatter

Вопрос:

Я пытаюсь преобразовать строки в числа, используя NSNumberFormatter . В моем приложении входные строки, содержащие более 2 цифр после десятичной запятой, недопустимы, т. Е. @"3.1" И @"3.14" Являются допустимыми входными данными, но @"3.141" не являются.

В документации для NSNumberFormatter говорится, что setMaximumFractionDigits: «[s] задает максимальное количество цифр после десятичного разделителя, разрешенное для ввода получателем».

Итак, я был удивлен, когда этот код:

 NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.maximumFractionDigits = 2;
NSNumber *number = [numberFormatter numberFromString:@"3.141"];
NSLog(@"%@", number);
  

принято @"3.141" и выдало мне следующий вывод:

 3.141
  

Я ожидал, что преобразование @"3.141" завершится неудачно (и вернется nil ), потому что оно содержит больше, чем максимальное количество цифр, разрешенных после десятичного разделителя.

Очевидно, я не понимаю здесь чего-то основного. NSNumberFormatter Не используется maximumFractionDigits как часть проверки ввода строки?

Ответ №1:

Предположение из-за отсутствия других ответов или каких-либо указаний на это в официальной документации: Нет, NSNumberFormatter не поддерживает всестороннюю проверку при разборе чисел и maximumFractionDigits имеет значение только при форматировании чисел. Похоже, это согласуется с with sscanf strtof и тому подобное.

Ответ №2:

numberFromString: Метод NSNumberFormatter возвращает значение an NSNumber , если он может правильно проанализировать строку, или nil, если не может.