NSString stringwithformat: заполнение 2 строк неизвестной длины

У меня проблема с NSString stringWithFormat...

Проблема заключается в следующем:

Во-первых, у меня есть 2 строки. Какие денежные количества.

Дело в том, что я хочу создать 1 строку с этими двумя.

Например:

strF = [NSString stringWithFormat:@"First: %@   Second: %@", value1, value2];

Я хочу знать, можно ли сделать правильное дополнение между первым и вторым. Предполагая, что первая строка не всегда имеет одинаковую длину.

Я хочу сделать это:

First: 10,000.00         Second: 788.00
First: 10.00             Second: 788.00
First: 0.00              Second: 788.00
First: 100.00            Second: 788.00
First: 5.00              Second: 788.00

person Tidane    schedule 06.06.2013    source источник
comment
Проверьте это: stackoverflow.com/questions/5386351/   -  person Pedro Mancheno    schedule 06.06.2013


Ответы (2)


revision Вот лучший способ, используя NSNumberFormatter:

Сначала создайте и настройте средство форматирования следующим образом:

NSNumberFormatter * formatter = [[ NSNumberFormatter alloc ] init ] ;
[ formatter setFormatWidth:20 ] ;
[ formatter setPaddingCharacter:@" " ] ;
[ formatter setFormatterBehavior:NSNumberFormatterBehavior10_4 ] ;
[ formatter setNumberStyle:NSNumberFormatterDecimalStyle ] ;
[ formatter setMinimumFractionDigits:2 ] ;
[ formatter setMaximumFractionDigits:2 ] ;

После того, как вы создали средство форматирования, ваш код станет таким:

strF = [ NSString stringWithFormat:@"First: %@ Second: %@", [ formatter stringFromNumber:value1 ], [ formatter stringFromNumber:value2 ] ] ;

Вы получите разделители (тысячи) (в текущей локали) и т. д.

Я бы создал средство форматирования в методе класса (что-то вроде +numberFormatter или в блоке dispatch_once). Вы даже можете добавить его в NSNumberFormatter через категорию и получить что-то вроде +[ NSNumberFormatter mySharedFormatter ]


Вы можете использовать спецификатор ширины поля. Он делает это:

NSString * value1String = ... from NSNumberFormatter to get commas inserted ;
[ NSString stringWithFormat:@"First: %20s Second: %0.2f", [ value1String UTF8String ], value2 ]

Где "20" - ширина столбца. (Замените желаемой шириной). Есть и другие варианты, такие как выравнивание по правому краю и т. д. Чтобы узнать больше, выполните man printf.

Если вы хотите добавить запятые, NSNumberFormatter сможет это сделать.

(На самом деле, вы, вероятно, тоже хотите, чтобы ваши десятичные дроби выровнялись, верно? Вы могли бы попробовать % 20.2f)

person nielsbot    schedule 06.06.2013
comment
В документе говорится, что %s будет интерпретировать строку в кодировке системы по умолчанию, так что это не совсем безопасно. developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ - person tia; 06.06.2013
comment
Спасибо за ответ... Это сработало.. но в конце концов.. Клиент попросил пользовательскую ячейку.. Итак... Мех!... - person Tidane; 07.06.2013

Ну, вам нужно установить максимальную длину как минимум value1, а затем вы можете сделать что-то вроде

int maxLength = MAX(15, value1.length); // Prevent cropping anyway
NSString* formattedValue1 = [value1 stringByPaddingToLength:maxLength withString:@" " startingAtIndex:0]
strF = [NSString stringWithFormat:@"First: %@ Second: %@", formattedValue1, value2];
person tia    schedule 06.06.2013