Número de formatação como porcentagem
-
27-09-2019 - |
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!?
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%