如何定义可变字符串格式说明符
How to define a variable string format specifier
我有这行代码
// 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"
... 并切换它们,但我想知道是否还有另一种方法...
有,如果你阅读格式说明符的手册页。您可以将精度替换为 *
,这意味着它将改为从参数中获取。
int numDigits = 10;
NSString *value = [NSString stringWithFormat:@"%.*Lg", numDigits, valueX];
我在核心基础参考中找不到它,但我知道它写在 man 3 printf
手册页中。
Dietrich 的回答是最简单的,因此也是最好的。请注意,即使没有使用参数指定位数的内置方法,您仍然可以通过首先构建格式字符串然后使用它来完成它:
- (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];
}
我有这行代码
// 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"
... 并切换它们,但我想知道是否还有另一种方法...
有,如果你阅读格式说明符的手册页。您可以将精度替换为 *
,这意味着它将改为从参数中获取。
int numDigits = 10;
NSString *value = [NSString stringWithFormat:@"%.*Lg", numDigits, valueX];
我在核心基础参考中找不到它,但我知道它写在 man 3 printf
手册页中。
Dietrich 的回答是最简单的,因此也是最好的。请注意,即使没有使用参数指定位数的内置方法,您仍然可以通过首先构建格式字符串然后使用它来完成它:
- (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];
}