Переменная интерполяция внутри функций форматирования в стиле printf - PullRequest
7 голосов
/ 06 января 2012

Есть ли способ передать переменную для параметра точности с плавающей запятой в функции форматирования строк в стиле printf в Objective-C (или даже C)? Например, в TCL и других языках сценариев я могу сделать что-то вроде этого:

set precision 2
puts [format "%${precision}f" 3.14159]

и на выходе будет, конечно, 3.14. Я хотел бы сделать что-то подобное в Objective-C:

float precision = 2
NSString *myString = [NSString stringWithFormat:@".2f", 3.14159]

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

Ответы [ 2 ]

6 голосов
/ 06 января 2012

Да, спецификаторы строкового формата для printf, которые используются Какао для форматирования, включают в себя спецификатор переменной точности, *, помещенный после десятичной точки:

int precision = 3;
NSLog(@"%.*f", precision, 3.14159);
NSString *myString = [NSString stringWithFormat:@".*f", precision, 3.14159];
1 голос
/ 06 января 2012

Вы можете сделать это, сделав строку формата переменной, а затем передав ее в stringWithFormat, например:

float precision = 2;
NSString* formatString = [NSString stringWithFormat:@"%%.%df", precision];
NSString* myString = [NSString stringWithFormat:formatString, 3.14159];

Строка формата говорит, что вы хотите символ «%», за которым следует «.» а затем значение сохраняется в переменной «точность», за которой следует «f».

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