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=%%}" />
Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top