NSString stringWithFormat вопрос - PullRequest
       7

NSString stringWithFormat вопрос

4 голосов
/ 23 апреля 2010

Я пытаюсь построить небольшую таблицу, используя NSString.Кажется, я не могу правильно отформатировать строки.

Вот что у меня есть

[NSString stringWithFormat:@"%8@: %.6f",e,v]

, где e - строка NSSt откуда-то еще, а v - это число с плавающей точкой.

Я хочу вывести что-то вроде этого:

Grapes:       20.3
Pomegranates:  2.5
Oranges:      15.1

Что я получу

Grapes:20.3
Pomegranates:2.5
Oranges:15.1

Как мне исправить мой формат, чтобы сделать что-то подобное?

Ответы [ 4 ]

6 голосов
/ 18 августа 2010

вы можете попробовать использовать - stringByPaddingToLength: withString: начальныйAtIndex:

3 голосов
/ 23 апреля 2010
NSDictionary* fruits = [NSDictionary dictionaryWithObjectsAndKeys:
                        [NSNumber numberWithFloat:20.3], @"Grapes",
                        [NSNumber numberWithFloat:2.5], @"Pomegranates",
                        [NSNumber numberWithFloat:15.1], @"Oranges",
                        nil];
NSUInteger longestNameLength = 0;
for (NSString* key in [fruits allKeys])
{
    NSUInteger keyLength = [key length];
    if (keyLength > longestNameLength)
    {
        longestNameLength = keyLength;
    }
}
for (NSString* key in [fruits allKeys])
{
    NSUInteger keyLength = [key length];
    NSNumber* object = [fruits objectForKey:key];
    NSUInteger padding = longestNameLength - keyLength + 1;
    NSLog(@"%@", [NSString stringWithFormat:@"%@:%*s%5.2f", key, padding, " ", [object floatValue]]);
}

Выход:

Oranges:      15.10
Pomegranates:  2.50
Grapes:       20.30
1 голос
/ 27 января 2011

Класс NSNumberFormatter - это путь!

Пример:

NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
[numFormatter setPaddingCharacter:@"0"];
[numFormatter setFormatWidth:2];
NSString *paddedString = [numFormatter stringFromNumber:[NSNumber numberWithInteger:integer]];
[numFormatter release];
0 голосов
/ 24 апреля 2010

Я думаю, вы хотите что-то вроде

[NSString stringWithFormat:@"%-9@ %6.1f",[e stringByAppendingString:@":"],v]

, так как вы хотите, чтобы отступ перед плавающей точкой соответствовал столбцу, хотя, если NSString длиннее 8, он сломает столбцы.

%-8f выравнивание по левому краю строки в столбце шириной 9 символов (шириной 9, так как : добавляется к строке заранее, что делается так, чтобы : находился в конце строки , а не после отступов); %6.1f выравнивание по правому краю с плавающей точкой в ​​поле из 6 символов с 1 десятичным знаком.

edit : также, если вы просматриваете выходные данные, как если бы они были HTML (например, через какое-то веб-представление), это может привести к уменьшению количества экземпляров более одного пробела один пробел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...