web-dev-qa-db-fra.com

Formater la valeur décimale en chaîne avec des espaces de début

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

Par exemple, une valeur décimale de 12.3456 doit être affiché en tant que " 12.3" avec un seul interligne. 10.011 serait " 10.0". 123.123 est "123.1"

Je recherche une solution qui fonctionne avec un formatage de chaîne standard/personnalisé, c'est-à-dire.

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

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

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"
86
nemesv

Un autre avec interpolation de chaîne (C # 6+):

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

L'expression renvoie: " 123.4560"

8
Freek Wiekmeijer
value.ToString("N1");

Modifiez le nombre pour plus de décimales.

EDIT: Vous avez manqué le bit de remplissage

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

Toutes les solutions ci-dessus effectueront l'arrondi de la décimale, juste au cas où quelqu'un chercherait une solution sans l'arrondir

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