NSNumberFormatter-DecimalStyle — При редактировании номера форматера его результат равен 0

#iphone #ios #xcode #ipad #ios4

#iPhone #iOS #xcode #iPad #ios4

Вопрос:

Я использовал приведенный ниже код для форматирования введенных символов в десятичном стиле, я использую приведенный ниже код в TextFields, который нужно отредактировать:

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];

long long num = [[formatter numberFromString:textField.text] longLongValue];

NSString *formattedOutput = [formatter stringFromNumber:[NSNumber numberWithLongLong:num ]];

textField.text = formattedOutput;

[formatter release];
  

У меня проблема в приведенном выше коде в том, что в первый раз он работает нормально, но когда мы возвращаемся к текстовому полю и редактируем, и выходим из него, значение меняется на 0,

Например, я ввел начальное значение 123456789 и правильно получил результат 123 456 789. Если я затем повторно введу и отредактирую текстовое поле на 123 456,78, поле будет заполнено 0, тогда как оно должно было быть 12 345 678.

Комментарии:

1. 123,456,78 является некорректной записью. Вы имеете в виду 123 456 789?

2. я не ввожу новое значение, просто редактирую форматированное число, т. Е. удаляю последнюю цифру, тогда значение заполняется до 0 вместо 12 345 678

Ответ №1:

NSNumberFormatter зависит от того, правильно ли отформатирован вводимый в него текст.

Поэтому, когда вы удаляете последнюю цифру из своего номера… то есть там, где число теперь выглядит как:

123,456,78

Теперь число отформатировано неправильно, и NSNumberFormatter предполагает, что это недопустимое число, и возвращает ноль.

Если вы хотите получить надежные значения long long из вашего текстового поля, удалите запятые перед преобразованием (при проверке текстового поля, чтобы убедиться, что там всего 0-9 цифры), и все должно быть готово.