240 votes

Format décimal pour les valeurs en pourcentage ?

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

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

Où %% est le fournisseur de format ou ce que je cherche. Le résultat devrait être : Value: %85.26. .

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

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

479voto

Michael Haren Points 42641

Utilisez le P chaîne de format . Cela varie selon les cultures :

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

2 votes

En regardant ici, la grande différence est de type US et France. Si ce qui précède varie selon la culture, existe-t-il une méthode indépendante de la culture ? P le formatage ?

2 votes

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

1 votes

Ainsi, comment puis-je formater une valeur en pourcentage sous une forme sensible à la culture mais avec un signe, de sorte que 0,123 soit formaté comme "+12,3 %" et dans la locale tr_TR comme "+%12,3" ?

19voto

Jon Schneider Points 2625

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 sur le fait que le "%" soit en tête ou en queue, vous pouvez utiliser la fonction NumberFormatInfo's Modèle de pourcentage de positivité y PercentNegativePattern propriétés.

Par exemple, pour obtenir une valeur décimale avec un "%" à la fin et sans 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)

8voto

suleymanduzgun Points 265

Définissez votre culture et le format de la chaîne "P".

CultureInfo ci = new CultureInfo("en-us");
double floating = 72.948615;

Console.WriteLine("P02: {0}", (floating/100).ToString("P02", ci)); 
Console.WriteLine("P01: {0}", (floating/100).ToString("P01", ci)); 
Console.WriteLine("P: {0}", (floating/100).ToString("P", ci)); 
Console.WriteLine("P1: {0}", (floating/100).ToString("P1", ci));
Console.WriteLine("P3: {0}", (floating/100).ToString("P3", ci));

Sortie :

"P02 : 72.95%"

"P01 : 72.9%"

"P : 72.95%"

"P1 : 72.9%"

"P3 : 72.949%"

7voto

David Neira Points 85

Si vous voulez utiliser un format qui vous permet de conserver le numéro comme votre entrée, ce format me convient : "# \\%"

6voto

Nitika Chopra Points 865

Ce code peut vous aider :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X