Как определить спецификатор формата переменной строки
У меня есть эта строка кода
// 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 ответа
Существует, если вы читаете справочные страницы для спецификаторов формата. Вы можете заменить точность на *
, что означает, что вместо этого он будет взят из параметра.
int numDigits = 10;
NSString *value = [NSString stringWithFormat:@"%.*Lg", numDigits, valueX];
Я не мог найти это в основной справочной информации, но я знаю, что это написано в man 3 printf
справочная страница.
Ответ Дитриха самый простой и потому лучший. Обратите внимание, что даже если бы не было встроенного способа указать количество цифр с параметром, вы все равно могли бы сделать это, сначала построив строку формата, а затем используя ее:
- (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];
}