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=%%}" />

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)

3

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


2

Este código pode ajudá-lo:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";

-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)

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.