NSNumber to NSString (без конечных нулей, если он имеет десятичные дроби) - PullRequest
1 голос
/ 22 сентября 2011

Я борюсь с этой проблемой, и я не смог найти для нее никаких ресурсов: У меня есть NSNumber, который я хочу отобразить в UITextField, чтобы пользователь мог его редактировать. Поэтому мне нужно преобразовать NSNumber в NSString, например:

float value  -> desired string value
1.0000000... -> 1
10.000000... -> 10
1.1230000... -> 1.123 or 1,123 depending on the locale
1000000.0... -> 1000000

Я пытался использовать NSNumberFormatter, но затем я получаю пробелы или запятые для больших чисел:

1000000.0... -> 1,000,000 or 1 000 000 depending on the locale

Я тоже пытался

[NSString stringWithFormat:@"%g", val]

Но тогда для больших чисел у меня есть научное выражение:

1000000.0 -> 1e+06

У кого-нибудь был успешный опыт с этим?

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011

NSNumberFormatter - это решение, вы выбрали правильный путь.

Но:

  • форматирование, которое он использует, зависит от локали (либоон использует локаль по умолчанию, если вы не переопределите ее, или вы можете установить локаль, используемую NSFormatter), потому что информация NSLocale также содержит информацию о форматировании региона (форматирование чисел с использованием локали США или локали FR приводит кразные форматы и разные представления)
  • Вы можете настроить форматирование, настроив параметры NSNumberFormatter, такие как изменение используемых разделителей группировки, изменение десятичного разделителя и т. д.

Этокак вы действительно можете настроить способ, которым NSNumberFormatter представляет числовое значение в строке.

3 голосов
/ 22 сентября 2011

NSNumberFormatter имеет такой метод как:

- (void)setGroupingSeparator:(NSString *)string

Я думаю, вы можете вернуться к варианту, где у вас есть:

1000000.0... -> 1,000,000 or 1 000 000 depending on the locale

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

[formatter setGroupingSeparator:@""];

Или, кроме того, попробуйте этот метод:

[formatter setUsesGroupingSeparator:NO];
0 голосов
/ 22 сентября 2011

попробуйте преобразовать значение nsnumber в NSInteger или CGFloat и сохранить его в новых переменных. Затем установите для преобразованных переменных значение uitextfield.

CGFloat floatNumber = [numberInNSNumber floatValue];

textfield.text = [NSString stringWithFormat:@"%0.2f",floatNumber];

Я думаю, это должно сработать для тебя .. !!

...