如何定义变量字符串格式说明符

时间:2017-07-08 17:05:24

标签: objective-c format-specifiers

我有这行代码

// valueX is a long double (long double is a huge floating point)
NSString *value = [NSString stringWithFormat: @"%.10Lg", valueX];

此格式说明符最多指定10个十进制数字,但我不想将其硬编码为10。

我想要使用这个变量numberOfDigits来定义位数。对于那些对这个问题嗤之以鼻的人来说,这并不像看起来那么容易。我无法用10替换%@,因为%.10Lg本身就是格式说明符。

好的,我可以创建一堆字符串,例如@"%.5Lg"@"%.8Lg"@"%.9Lg" ...并切换它,但我想知道是否还有其他方法...

2 个答案:

答案 0 :(得分:4)

如果您阅读格式说明符的手册页,则有。您可以使用*替换精度,这意味着它将取自参数。

int numDigits = 10;
NSString *value = [NSString stringWithFormat:@"%.*Lg", numDigits, valueX];

我在核心基础参考中找不到这个,但我知道这是在man 3 printf手册页中写的。

答案 1 :(得分:1)

迪特里希的答案是最简单的,因此也是最好的。请注意,即使没有内置方法来指定带参数的位数,您仍然可以通过首先构建格式字符串然后使用它来完成它:

- (NSString *) stringFromValue: (long double) value digits: (int) digits; {

  //First create a format string. Use "%%" to escape the % escape char.
  NSString *formatString =[NSString stringWithFormat: @"%%.%dLg", digits];

  return [NSString stringWithFormat: formatString, value];
}