Создайте строку динамического форматирования для значений с плавающей запятой фиксированной ширины. - PullRequest
1 голос
/ 27 марта 2012

У меня есть класс, содержащий различные типы числовых значений. В этом классе у меня есть несколько вспомогательных методов, которые используются для вывода текста дескриптора для отображения в моем приложении.

Этот текст дескриптора всегда должен отображаться как целое число или число с плавающей точкой, в зависимости от определения конкретного экземпляра.

У класса есть свойство DecimalWidth, которое я использую для определения количества отображаемых десятичных знаков. Мне нужна помощь в написании строки кода, которая отображает числовое значение, но с фиксированным числом десятичных знаков, (0 - это возможность, и в таком случае значение должно отображаться как целое число.)

Я знаю, что могу вернуть значение, подобное [NSString stringWithFormat:@"%.02f", self.Value], но моя проблема в том, что мне нужно заменить '2' в строке формата значением DecimalWidth.

Я могу придумать пару способов решения этой проблемы. Я мог бы объединить строку вместе, и это как строка формата для строки выводимой строки. Или я мог бы сделать строку формата внутри строки формата.

Эти решения звучат отвратительно и кажутся довольно неэффективными, но, возможно, это лучшие варианты, которые у меня есть.

Существует ли элегантный способ построения строки динамического форматирования, где выходные данные представляют собой фиксированное число десятичной ширины, но указанная десятичная ширина является динамической?

Ответы [ 2 ]

5 голосов
/ 27 марта 2012

Это не звучит отвратительно или неэффективно для меня.

[NSString stringWithFormat:[NSString stringWithFormat:@"%%.%df", DecimalWidth], self.Value]

На самом деле я думаю, что довольно элегантно.

2 голосов
/ 27 марта 2012

Однако одним из решений проблемы, безусловно, является вопрос, предложенный @lulius caesar, но одним хорошим способом является также использование NSNumberFormatter.Ниже приведен пример кода, который вы можете использовать для генерации десятичных значений с фиксированным десятичным числом

    NSNumberFormatter *numberFormatter=[[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMinimumFractionDigits:DecimalWidth];
    [numberFormatter setMaximumFractionDigits:DecimalWidth];
    NSString * decimalString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:self.value]]]
...