Format décimal pour les valeurs de pourcentage?

206

Ce que je veux, c'est quelque chose comme ça:

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

Où %% est ce fournisseur de format ou tout ce que je recherche. Devrait se traduire par : Value: %85.26..

J'en ai essentiellement besoin pour la liaison wpf, mais d'abord, résolvons le problème général de formatage:

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

Réponses:

11

Si vous avez une bonne raison de mettre de côté le formatage dépendant de la culture et d'obtenir un contrôle explicite sur la présence ou non d'un espace entre la valeur et le "%", et si le "%" est en tête ou en fin, vous pouvez utiliser PercentPositivePattern de NumberFormatInfo et Propriétés PercentNegativePattern .

Par exemple, pour obtenir une valeur décimale avec un "%" de fin et aucun 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)
Jon Schneider
la source
3

Si vous souhaitez utiliser un format qui vous permet de conserver le nombre comme votre entrée, ce format fonctionne pour moi: "# \\%"

David Neira
la source
2

Ce code peut vous aider:

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

J'ai trouvé que la réponse ci-dessus était la meilleure solution, mais je n'aime pas l'espace devant le signe de pourcentage. J'ai vu des solutions quelque peu compliquées, mais j'utilise simplement cet ajout Remplacer à 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)
Ian Townsend
la source
Et toujours faux, si vous voulez forcer autant cette entrée, vous pouvez mettre le nombre comme flottant et ajouter le signe de pourcentage, car le remplacement est coûteux et dans ce cas pas très utile "String.Format (" Value: {0: F2} . ", 0.8526 * 100)"
rekiem87