2009-11-24 7 views
155

Ce que je veux est quelque chose comme ceci:Format décimal pour les valeurs en pourcentage?

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

Où %% est que fournisseur de format ou tout ce que je cherche. Devrait afficher: Value: %85.26..

J'ai besoin essentiellement pour WPF contraignant, mais tout d'abord résoudre la question générale de mise en forme:

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

Répondre

345

Utilisez le P format string. Cela varie selon la culture:

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

[Regarder ici grande différence est comme nous et le type France.] (Http://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx) Si ci-dessus varie selon la culture, y a-t-il un format 'P' indépendant de la culture? – bonCodigo

+0

@bonCodigo: si vous voulez la sortie pour une culture spécifique, spécifiez la culture explicitement. –

3

Si vous avez une bonne raison de mettre de côté la mise en forme en fonction de la culture et d'obtenir un contrôle explicite sur si oui ou non il y a un espace entre la valeur et le « % », et si le " % "est en avant ou en arrière, vous pouvez utiliser les propriétés PercentPositivePattern et PercentNegativePattern de NumberFormatInfo.

Par exemple, pour obtenir une valeur décimale avec un « % » de fuite et pas d'espace entre la valeur et le « % »:

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

exemple plus complet:

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

Je trouvé la réponse ci-dessus pour être la meilleure solution, mais je n'aime pas l'espace avant le signe de pourcentage. J'ai vu des solutions quelque peu compliquées, mais j'utilise simplement cet ajout à la réponse ci-dessus au lieu d'utiliser d'autres solutions d'arrondi.

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

Et encore faux, si vous voulez forcer cette entrée tellement vous pouvez mettre le nombre comme flottant et ajouter le signe de pourcentage, puisque le remplacement est coûteux et dans ce cas pas très utile "String.Format (" Valeur: {0: F2 }. ", 0.8526 * 100)" – rekiem87

+0

totalement d'accord avec rekiem87 – Defkon1

Questions connexes