Форматирование числа с NSNumberFormatter, у которого уже есть десятичные дроби и тысячи разделителей - PullRequest
0 голосов
/ 10 декабря 2010

У меня есть следующие числовые форматы:

100000,459
100000459
100.000
100.000,59
100.000.000,39

Число изменяется в зависимости от вводимых пользователем значений.И для каждого добавленного значения мне нужно переформатировать число с помощью NSNumberFormatter.Проблема в том, что этот номер уже есть.и, и средство форматирования, кажется, не обрабатывает их правильно.Получается так:

100 000,00
100 000 459,00
100,00
100,00
100,00

Например, я хочу, чтобы 100000459 стал 100 000 459.

Код, который я сейчас использую:

NSNumber *amount = [NSNumber numberWithInt:[string intValue]];
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"nb_NO"];
[currencyFormatter setLocale:locale];
NSString *commaString = [currencyFormatter stringForObjectValue:amount];

Как яформатировать уже отформатированные числа?

Ответы [ 3 ]

1 голос
/ 10 декабря 2010

В последней строке вы пытаетесь отформатировать строку, а не число.Попробуйте это:

NSString *commaString = [currencyFormatter stringFromNumber:amount];

Вот хорошая ссылка .

0 голосов
/ 10 декабря 2010

NSNumberFormatter форматирует число в строковое представление, и ему необходимо правильное представление числа, чтобы можно было отформатировать его, как ожидается.Судя по вашему примеру кода, вы предоставляете форматеру целочисленное значение, и именно поэтому вы получаете вывод, который вы получаете.С string = @"100000,459" [string intValue] дает вам 100000.Вот почему вывод от форматера: 100 000,00.

Что вам нужно сделать, это сначала получить строку в двойном представлении.Это может быть достигнуто с помощью NSScanner.Вам просто нужно убедиться, что вы сканируете числа в правильной локали, чтобы правильно определить тысячи разделителей.Ваша первая строка может быть преобразована в двойное число:

NSScanner *scanner = [NSScanner scannerWithString:@"100000,459"];
[scanner setLocale:locale];
double val;
[scanner scanDouble:&val];
NSNumber *amount = [NSNumber numberWithDouble:val];

Как правильно обрабатывать тысячи разделителей, которые я не знаю.

0 голосов
/ 10 декабря 2010

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

...