Форматирование числа в процентах - PullRequest
19 голосов
/ 11 августа 2010

Я не понимаю, как работает NSNumberFormatterPercentStyle!

Пример:

NSNumber *number = [NSNumber numberWithFloat:90.5];
NSNumberFormatter *percentageFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[percentageFormatter setNumberStyle:NSNumberFormatterPercentStyle];

NSString *strNumber = [percentageFormatter stringFromNumber:numbericString];
NSLog (strNumber);  // Output: 9,050%

Я просто хочу показать "90,5%" (уважая NSLocal). Что NSNumberFormatterPercentStyle делает с 90.5 и почему? И как я могу получить желаемый результат!?

Ответы [ 6 ]

54 голосов
/ 04 сентября 2013

Просто установите множитель на 1, если ваши числа уже в процентах.

numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
[numberFormatter setMaximumFractionDigits:0];
[numberFormatter setMultiplier:@1];
28 голосов
/ 11 августа 2010

Предполагается, что число находится в диапазоне 0-1, так как это процент

, поэтому 0,905 даст вам 90,5%.

4 голосов
/ 11 августа 2010

Давайте начнем с основ:

  • 1 = 100%
  • 1/2 = 0,5 = 50%

«Процент» означает «из 100 ", поэтому 12% означает 12/100.Вы не «умножаете на 100», чтобы получить процентное значение, вы умножаете на 100% (что равносильно умножению на 1, что равносильно тому, чтобы ничего не делать).

Не все используют базу10 (хотя большинство «современных» языков), и не все используют 100 в качестве знаменателя.Смотрите, например, perMillSymbol (или kCFNumberFormatterPerMillSymbol).Формат «permill» отсутствует, но, возможно, он автоматически используется для локалей, в которых не используются проценты.

См. Также: ЗНАК НА МИЛЛИЮ (‰) и ЗНАК НА ДЕСЯТЬ ТЫСЯЧЕЙ (‱).

3 голосов
/ 11 августа 2010

Я не знаю этот язык, но, исходя из вашего примера кода и вывода, я бы предположил, что средство форматирования в процентах умножается на 100, а затем ставит знак%, так что 1 становится 100%. То, что вы хотите, это использовать .905, который должен стать 90,5%.

2 голосов
/ 11 августа 2010

Форматировщик в «процентном стиле» ожидает число 0.905, если вы хотите получить 90.5%.Он интерпретирует 90.5 как 1, так что это 9050% от 1.

0 голосов
/ 30 декабря 2014

Ответ Пулькита Гояла правильный ... установка множителя на 1 превращает '50' в '50% '

...