printf样式格式化函数内的可变插值

时间:2012-01-06 17:03:26

标签: objective-c printf

有没有办法在Objective-C(甚至C)中的printf样式字符串格式化函数中传递浮点精度参数的变量?例如,在TCL和其他脚本语言中,我可以这样做:

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

,输出当然是3.14。我想在Objective-C中做类似的事情:

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

除了我想将precision作为变量包含在内。怎么办呢?

2 个答案:

答案 0 :(得分:6)

是的,Cocoa用于格式化的printf string format specifiers包含一个位于小数点后面的变量精度说明符*

int precision = 3;
NSLog(@"%.*f", precision, 3.14159);
NSString *myString = [NSString stringWithFormat:@".*f", precision, 3.14159];

答案 1 :(得分:1)

您可以通过将格式字符串变为变量,然后将其传递给stringWithFormat来实现,如下所示:

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

格式字符串表示您需要一个“%”符号后跟一个“。”然后将值存储在变量“precision”中,后跟“f”。