Search code examples
objective-cformat-specifiers

How to define a variable string format specifier


I have this line of code

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

This format specifier is specifying up to 10 decimal digits but I don't want to hard code this to 10.

I have this variable numberOfDigits that I want to be used to define the number of digits. For those itching to down vote this question, it is not so easy as it seems. I cannot substitute the 10 with %@ because %.10Lg is a format specifier by itself.

OK, I can create a bunch of strings like @"%.5Lg", @"%.8Lg", @"%.9Lg"... and switch that, but I wonder if there is another way...


Solution

  • There is, if you read the manual pages for format specifiers. You can replace the precision with *, which means it will get taken from a parameter instead.

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

    I couldn't find this in the core foundation reference, but I know that this is written in the man 3 printf man page.