Pergunta

Eu não entendo como o NSNumberFormatterPercentStyle funciona!

Exemplo:

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%

Eu simplesmente quero mostrar "90,5%" (respeitando o NSLOCAL). O que o NSNumberFormatterPentStyle está fazendo com 90,5 e por quê? E como posso obter o resultado desejado!?

Foi útil?

Solução

Presumindo que o número esteja na faixa de 0-1, pois é um porcentagem

Portanto, 0,905 receberia 90,5%.

Outras dicas

Basta definir o multiplicador para 1 Se seus números já estiverem em porcentagem.

numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterPercentStyle];
[numberFormatter setMaximumFractionDigits:0];
[numberFormatter setMultiplier:@1];

Vamos começar com o básico:

  • 1 = 100%
  • 1/2 = 0.5 = 50%

"Porcentagem" significa "de 100", então 12% significa 12/100. Você não "multiplica por 100" para obter um valor percentual, você multiplica por 100% (o mesmo que multiplicar por 1, que é o mesmo que não fazer nada).

Nem todo mundo usa a base 10 (embora a maioria dos idiomas "modernos"), e nem todo mundo usa 100 como denominador. Veja, por exemplo, PermillSymbol (ou KCFNumberFormatterPermillSymbol). Não existe um formato de "permissão", mas é possível que ele seja usado automaticamente para locais que não usam porcentagens.

Veja também: por sinal de Mille (‰) e por dez mil sinais (‱ ‱).

Não conheço esse idioma, mas com base no seu exemplo de amostra e saída, acho que a porcentagem do formatador se multiplica por 100 e depois coloca o sinal de % para que 1 se torne 100 %. O que você deseja é usar .905, que deve se tornar 90,5%.

O formatador "porcentagem de estilo" espera uma série de 0.905 Se você quiser acabar com 90.5%. Interpreta 90.5 Como de 1, é 9050% de 1.

A resposta de Pulkit Goyal está correta ... definir o multiplicador para 1 faz '50' em '50%'

Swift 4/5

Crio NSNumber extensão assim

extension NSNumber {
    func getPercentage() -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .percent
        formatter.maximumFractionDigits = 0 // You can set what you want
        return formatter.string(from: self)!
    }
}

Obtenha porcentagem

let confidence = 0.68300 as NSNumber
print(confidence.getPercentage())

Resultado

68%

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top