Как определить спецификатор формата переменной строки

У меня есть эта строка кода

// 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];
}
Другие вопросы по тегам