NSNumberFormatter-Десятичный стиль -для форматирования неограниченного количества символов

#iphone #ios #xcode #ipad #ios-simulator

#iPhone #iOS #xcode #iPad #ios-симулятор

Вопрос:

Приведенный ниже код используется для моего требования к форматированию неограниченного количества символов в десятичном стиле.Но это работает только для 18 цифр,

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

[formatter setNumberStyle:NSNumberFormatterDecimalStyle];

long long num =  [textField.text longLongValue];

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

textField.text = formattedOutput;

[formatter release];
  

Что делать?

Заранее спасибо, Бхаскар

Ответ №1:

Я не вижу проблемы в форматированной строке, проблема может быть в текстовом поле.

Пример:

 long long maxLongLong = 0x7fffffffffffffff;
NSLog(@"maxLongLong: %llu", maxLongLong);

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];    
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSString *formattedOutput = [formatter stringFromNumber:[NSNumber numberWithLongLong:maxLongLong]];
NSLog(@"formattedOutput: %@", formattedOutput);
  

Вывод NSLog:

 maxLongLong: 9223372036854775807
formattedOutput: 9,223,372,036,854,775,807
  

Однако, NSNumberFormatter похоже, не работает с unsigned long long .

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

1. Спасибо за ваш код, это помогает мне больше. Но у меня проблема, я использовал ваш код в ‘textFieldShouldEndEditing’, в первый раз он работает нормально, но когда мы возвращаемся к текстовому полю и выходим из него, значение меняется. Например, я впервые ввел значение 123456789123456789 и получил этот результат 123,456,789,123,456,789, и теперь, когда мы повторно вводим и выходим из текстового поля с редактированием или без, я получаю значение 123. и другая проблема в том, что его форматирование до 18 символов, только если введено больше 18, мы получаем другой ответ, т.е. 9,223,372,036,854,775,807.

2. Проверьте код текстового поля, вы получаете правильную строку обратно? 9223372036854775807 — максимальное целое число со знаком для long long, для больших чисел вам придется либо использовать плавающую точку, либо использовать собственную обработку чисел, либо оштрафовать числовой пакет, который обрабатывает большие целые числа.