Отображение подписанного поплавка в UILabel

Я знаю, что есть "сложный" способ сделать это (не такой сложный, но и не прямой).

Я отображаю значение с плавающей запятой в процентах на метке следующим образом:

myLabel.text = [NSString stringWithFormat:@"%.1f%%", myFloat];

Я хочу заставить метку отображать знак поплавка. Конечно, он автоматически показывает «-», если значение отрицательное. Я знаю, что могу сделать это, используя метод такого типа:

-(NSString *) stringFromFloat: (float) theFloat {

    if (theFloat > 0) return [NSString stringWithFormat: @"+%.1f%%", theFloat];
    else return [NSString stringWithFormat: @"%.1f%%", theFloat];
}

Но это означало бы вызов [self stringFromFloat:aFloat]; каждый раз, когда мне нужно отобразить значение с плавающей запятой. Я знаю, что использование этого решения «лучше», потому что оно снижает количество повторно используемых строк, но если мои метки не показывают одинаковое количество десятичных знаков, stringFromFloat: может быстро расти...

Итак, мой вопрос: есть ли «простой» и стандартный способ сделать это? Как средство форматирования NSString или что-то в этом роде? Например, заменить @"%.1f%%" чем-то вроде @"%sign%.1f%%"?

Если нет ничего такого прямолинейного, что-то вроде stringFromFloat: будет лучшим решением?

Спасибо !


person rdurand    schedule 17.09.2012    source источник


Ответы (1)


Вам не нужно делать знак частью формата — его можно параметризовать, например:

myLabel.text = [NSString stringWithFormat:@"%@%.1f%%", myFloat<0 ? @"" : @"+", myFloat];

Даже если вы хотите поместить его в формат, строку формата можно подготовить в выражении:

myLabel.text = [NSString stringWithFormat:myFloat<0 ? @"%.1f%%" : @"+%.1f%%", myFloat];
person Sergey Kalinichenko    schedule 17.09.2012
comment
Ну отлично работает! Я использовал первый, и он идеален. Просто для общего сведения, как называется это действие (часть со сравнением switch-like)? Похоже, он ведет себя как блоки, но я не знаю, как его назвать? Большое спасибо за быстрый ответ! - person rdurand; 17.09.2012
comment
@rdurand Это условный или тернарный оператор, он такой же в Objective C и в C/C++/Java/C#. Он называется тернарным, потому что он принимает три операнда — условие, выражение if true и выражение if false. - person Sergey Kalinichenko; 17.09.2012