我有这行代码
// 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"
...并切换它,但我想知道是否还有其他方法...
答案 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];
}