NSNumberFormatter не будет принимать нули после десятичной точки - PullRequest
1 голос
/ 25 сентября 2011

Были заданы аналогичные вопросы, но я считаю, что предлагаемые решения не работают с последним iOS SDK или не совсем применимы в данном конкретном случае.

Я вызываю метод с использованием NSNotification, который форматирует число с символами группировки в UILabel, поскольку оно вводится с использованием цифр от ввода с кнопки. Он отлично работает и для целых и десятичных чисел - до тех пор, пока после десятичной точки не вводятся нули. Например, если введено 2000, оно отображается как 2000, так как оно вводится просто отлично. Если введено значение 23.345, то это тоже нормально отображается. Любые вычисления, сделанные на этих числах, оказываются правильными. Но невозможно ввести 0,0001 или 0,2340007! Он просто не будет принимать и добавлять нули после десятичной точки.

Я получил оригинальную идею кода из другого поста здесь в stackoverflow:

NSString *currentText = [display_ text];
currentText = [currentText stringByReplacingOccurrencesOfString:@","
               withString:@""];
currentText = [currentText stringByReplacingOccurrencesOfString:@"." 
               withString:@"."];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setGroupingSeparator:@","];
[formatter setDecimalSeparator:@"."];
[formatter setMaximumFractionDigits:10];

NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:currentText];

NSString *finalText = [formatter stringFromNumber:number];

NSString *lastChar = [currentText substringFromIndex:[currentText length] - 1]; 

if ([lastChar isEqualToString:@"."]) 
{
 finalText = [finalText stringByAppendingString:@"."];
}

[display_ setText: finalText];
[formatter release];

Никакое суммирование (которое я пробовал) с параметрами форматера не позволит ввести нули после десятичной точки.

1 Ответ

4 голосов
/ 25 сентября 2011

Почему вы заменяете "." с "."? Что вы видите в отладчике после создания экземпляра числа?

Я никогда не работал с NSDecimalNumber, но некоторое время назад уже боролся с двойниками. Я бы предложил решить проблему. Создайте number с жестко запрограммированным значением, отформатируйте его и запишите в файл журнала. Если это не работает, попробуйте мой код ниже, он отлично работает в моем приложении с двойными значениями. Я использую немецкие настройки локали, но это не должно быть главное.

NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
[formatter setAllowsFloats:TRUE];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMinimumSignificantDigits:20];
[formatter setMaximumSignificantDigits:20];
[formatter setMinimumFractionDigits:0];
[formatter setMaximumFractionDigits:5];
NSLocale* locale = [NSLocale currentLocale];
[formatter setLocale:locale];
NSNumber* number = [NSNumber numberWithDouble:1000.0123f];
myTextField.text = [formatter stringFromNumber:number];

Если ваш код уже работает,

  • проверить, что вместо нуля нет O
  • Удалить это "." указанная выше замена
  • Я обнаружил, что установка локали явно решила некоторые проблемы (слишком давно, чтобы помнить детали, но вы могли бы попробовать)
  • Замените NSDecimalNumber на NSNumber и введите в него двойные значения
  • Проверьте файл XIB и убедитесь, что ваше текстовое поле не выполняет никакого другого форматирования
...