2009-11-24 18 views
155

Lo que yo quiero es algo como esto:Formato decimal para valores porcentuales?

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

Dónde %% es que el proveedor de formato o cualquier cosa que yo estoy buscando. Resultado: Value: %85.26..

que básicamente se necesitan para la unión de WPF, pero primero vamos a resolver el problema de formato en general:

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

Respuesta

345

Utilice la P format string. Esto varía según la cultura:

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture) 
+0

[Mirando aquí gran diferencia es como Estados Unidos y Francia tipo.] (Http://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx) Si arriba varía según la cultura, ¿existe un formato 'P' independiente de la cultura? – bonCodigo

+0

@bonCodigo: si desea la salida para una cultura específica, especifique la cultura explícitamente. –

3

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

Por ejemplo, para obtener un valor decimal con un trailing "%" y no hay 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) 
-7

tengo encontré la respuesta anterior como 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 opción 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) 
+0

Y todavía está mal, si desea forzar esa entrada tanto puede 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

+0

totalmente de acuerdo con rekiem87 – Defkon1

Cuestiones relacionadas