#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, если не может.