Проверка строк с использованием NSNumberFormatter - PullRequest
1 голос
/ 18 октября 2011

Я пытаюсь преобразовать строки в числа, используя NSNumberFormatter.В моем приложении входные строки с более чем двумя цифрами после десятичной точки недопустимы, т. Е. @"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 как часть проверки ввода строки?

Ответы [ 2 ]

1 голос
/ 19 октября 2011

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

0 голосов
/ 18 октября 2011

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

...