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

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)

3

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


2

Ce code peut vous aider:

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

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.