2010-08-26 6 views

Répondre

4

Non, String.Format ne supporte pas l'opérateur étoiles. Vous auriez besoin d'utiliser soit la concaténation de chaîne

Console.WriteLine("{0:D" + myPrecision.ToString() + "}",1); 

ou emboîtés String.Format s

Console.WriteLine(String.Format("{{0:D{0}}}", 4), 1); 
2

Oui cela est possible. Vous avez juste besoin d'ajouter le nombre de précision après le spécificateur de format. Par exemple

Console.WriteLine("{0:D4}",1); // Outputs 0001; 

Ce que fait le modificateur de précision est spécifique au type de format choisi. Dans ce cas, le D représente la sortie décimale. Voici un lien vers les types de formats numériques et ce que signifie la précision pour chacun d'entre eux.

+0

Non, ce que je veux est: Console.WriteLine ("{0: D *}", 1,4); // Sorties 0001; – Sprintstar

+0

Donc, la réponse à votre question est non, @Sprintstar, C# implémente une syntaxe similaire avec la même fonctionnalité. –

4

Le formatage de la chaîne de format devrait faire l'affaire:

var number = 1; 
var width = 4; 
Console.WriteLine(String.Format("{{0:D{0}}}", width), number); 

Il sortira 0001.

Remarquez comment {{ et }} sont utilisés pour échapper { et } dans une chaîne de format.

+2

+1 pour expliquer la syntaxe des accolades d'échappement. – Heinzi

0

Pour formater une chaîne justifiée à gauche pour la longueur spécifiée.

int len = 20; 
string fmt = string.Format("{{0,-{0}}}", len); 
string name = string.Format(fmt, "a persons name"); 

ou

name.PadRight(len); 

Le résultat doit être un nom qui est rembourré à droite pour une longueur totale de 20 caractères.

1

Mon contournement est similaire à la façon dont Qt implémente QString::arg(). Je viens de mettre un espace réservé, puis l'a remplacé par la valeur de numericPrecision.

numericPrecision = "N2"; 
var summary = string.Format(
    "{0}: {1:_np_}, {2}: {3:_np_}, {4}: {5:_np_}".Replace("_np_", numericPrecision), 
    title1, value1, 
    title2, value2, 
    title3, value3); 
Questions connexes