Formatar decimal para valores percentuais?

206

O que eu quero é algo como isto:

String.Format("Value: {0:%%}.", 0.8526)

Onde %% é esse provedor de formato ou o que eu estou procurando. Deve resultar: Value: %85.26..

Basicamente, preciso dele para a ligação wpf, mas primeiro vamos resolver o problema geral de formatação:

<TextBlock Text="{Binding Percent, StringFormat=%%}" />
Shimmy Weitzhandler
fonte

Respostas:

11

Se você tiver um bom motivo para deixar de lado a formatação dependente da cultura e obter controle explícito sobre se existe ou não um espaço entre o valor e o "%" e se o "%" é inicial ou final, você pode usar o PercentPositivePattern de NumberFormatInfo e Propriedades PercentNegativePattern .

Por exemplo, para obter um valor decimal com um "%" à ​​direita e sem espaço entre o valor e o "%":

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)
Jon Schneider
fonte
3

Se você deseja usar um formato que permita manter o número como sua entrada, este formato funciona para mim: "# \\%"

David Neira
fonte
2

Este código pode ajudá-lo:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
Nitika Chopra
fonte
-8

Eu achei a resposta acima a melhor solução, mas não gosto do espaço inicial antes do sinal de porcentagem. Eu vi soluções um tanto complicadas, mas apenas uso essa adição Substituir na 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)
Ian Townsend
fonte
E, ainda assim, errado, se você quiser forçar tanto essa entrada, poderá colocar o número como float e adicionar o sinal de porcentagem, pois a substituição é cara e, neste caso, não é muito útil "String.Format (" Value: {0: F2} . ", 0,8526 * 100)"
rekiem87 29/06