Formatar decimal para valores percentuais?
-
22-09-2019 - |
Pergunta
O que eu quero é algo assim:
String.Format("Value: {0:%%}.", 0.8526)
Onde %% é esse provedor de formato ou o que estou procurando.Deve resultar: Value: %85.26.
.
Basicamente, preciso disso para vinculação do wpf, mas primeiro vamos resolver o problema geral de formatação:
<TextBlock Text="{Binding Percent, StringFormat=%%}" />
Solução
Use o P
String de formato. Isso varia de acordo com a cultura:
String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)
Outras dicas
Se você tiver um bom motivo para deixar de lado a formatação dependente da cultura e obter controle explícito sobre se há ou não um espaço entre o valor e o "%" e se o "%" está à esquerda ou à direita, você pode usar o NumberFormatInfo's PorcentagemPositivaPadrão e PorcentagemNegativaPadrão propriedades.
Por exemplo, para obter um valor decimal com um "%" no final e sem espaço entre o valor e "%":
myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 });
Exemplo mais completo:
using System.Globalization;
...
decimal myValue = -0.123m;
NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 };
string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us)
Se você deseja usar um formato que permita que você mantenha o número como sua entrada, este formato funciona para mim:"# \\%"
Este código pode ajudá -lo:
double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
Eu encontrei a resposta acima para ser a melhor solução, mas não gosto do espaço principal antes do sinal percentual. Eu já vi soluções um tanto complicadas, mas apenas uso essa adição de substituição à resposta acima, em vez de usar outras soluções de arredondamento.
String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)