78 votes

Formatage de la valeur décimale en chaîne de caractères avec des espaces en tête

Comment formater une valeur décimale en une chaîne de caractères avec un seul chiffre après la virgule/le point et les espaces avant pour les valeurs inférieures à 100 ?

Par exemple, une valeur décimale de 12.3456 devrait être produit comme " 12.3" avec un seul espace en tête. 10.011 serait " 10.0" . 123.123 es "123.1"

Je cherche une solution qui fonctionne avec le formatage standard/commandé des chaînes de caractères, c'est-à-dire

decimal value = 12.345456;
Console.Write("{0:magic}", value); // 'magic' would be a fancy pattern.

116voto

nemesv Points 71516

Ce modèle {0,5:###.0} devrait fonctionner :

string.Format("{0,5:###.0}", 12.3456) //Output  " 12.3"
string.Format("{0,5:###.0}", 10.011)  //Output  " 10.0" 
string.Format("{0,5:###.0}", 123.123) //Output  "123.1"
string.Format("{0,5:###.0}", 1.123)   //Output  "  1.1"
string.Format("{0,5:###.0}", 1234.123)//Output "1234.1"

0 votes

C'est certainement le cas ! Merci ! :)

7 votes

Existe-t-il une bonne référence à ce sujet ? Par exemple, que fait chaque partie si mon cas d'utilisation est légèrement différent.

6 votes

58voto

Freek Wiekmeijer Points 1902

Un autre avec interpolation de chaînes de caractères (C# 6+) :

double x = 123.456;
$"{x,15:N4}"// left pad with spaces to 15 total, numeric with fixed 4 decimals

L'expression revient : " 123.4560"

15voto

Taz Points 615
value.ToString("N1");

Modifiez le nombre pour obtenir plus de décimales.

EDIT : J'ai raté la partie rembourrage

value.ToString("N1").PadLeft(1);

0 votes

Merci. Mais l'utilisation de PadLeft ne fonctionnera pas dans mon cas, la chaîne avec le caractère de remplacement {0 :...} va contenir plus de texte que la simple valeur décimale.

2 votes

@Taz : Vous devez écrire `PadLeft(5)'. Le paramètre est la longueur totale de la chaîne à padder.

0 votes

@Jakob : Pourquoi ne pouvez-vous pas utiliser string.Format() ?

5voto

Brian Hong Points 214

Beaucoup de bonnes réponses, mais c'est ce que j'utilise le plus (c# 6+) :

Debug.WriteLine($"{height,6:##0.00}");
//if height is 1.23 =>   "  1.23"
//if height is 0.23 =>   "  0.23"
//if height is 123.23 => "123.23"

0voto

Anshul Nigam Points 253

Toutes les solutions ci-dessus font l'arrondi des décimales, juste au cas où quelqu'un chercherait une solution sans arrondi.

decimal dValue = Math.Truncate(1.199999 * 100) / 100;
dValue .ToString("0.00");//output 1.99

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