Formato decimal para valores de porcentaje?

206

Lo que quiero es algo como esto:

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

Donde %% es ese proveedor de formatos o lo que sea que esté buscando. Debería resultar:Value: %85.26. .

Básicamente lo necesito para el enlace wpf, pero primero solucionemos el problema general de formato:

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

Respuestas:

11

Si tiene una buena razón para dejar de lado el formato dependiente de la cultura y obtener un control explícito sobre si hay o no un espacio entre el valor y el "%", y si el "%" está al principio o al final, puede usar el PercentPositivePattern de NumberFormatInfo y Porcentaje Negativo Patrón propiedades.

Por ejemplo, para obtener un valor decimal con un "%" final y sin espacio entre el valor y el "%":

myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 });

Ejemplo más 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
fuente
3

Si desea utilizar un formato que le permita mantener el número como su entrada, este formato me funciona: "# \\%"

David Neira
fuente
2

Este código puede ayudarlo a:

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

He encontrado que la respuesta anterior es la mejor solución, pero no me gusta el espacio inicial antes del signo de porcentaje. He visto soluciones algo complicadas, pero solo uso esta adición de Reemplazar a la respuesta anterior en lugar de usar otras soluciones de redondeo.

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)
Ian Townsend
fuente
Y aún así, si desea forzar tanto esa entrada, podría poner el número como flotante y agregar el signo de porcentaje, ya que reemplazar es costoso y en este caso no es muy útil "String.Format (" Valor: {0: F2} . ", 0.8526 * 100)"
rekiem87