2012-05-10 4 views
1

J'ai une ligne comme ce qui suit dans mon code:Pourquoi string.Format produit un tel résultat?

string buffer = string.Format(CultureInfo.InvariantCulture, "{0:N4}", 1008.0); 

Pourquoi buffer contiennent 1,008.0 (note virgule) après l'exécution de cette ligne? Oui, je suppose que c'est causé par mes paramètres régionaux. La question est pourquoi ils affectent le résultat dans ce cas?

EDIT:

Ok, je comprends que c'est tout à fait ma faute. Il semble que j'aurais dû utiliser F format specifier.

+0

Quel est votre cadre régional ...? – gdoron

+0

@gdoron Russe (Russie) – Bobrovsky

+1

@gdoron ok, n'est pas CultureInfo.InvariantCulture devrait remplacer cela? – Bobrovsky

Répondre

5

Le InvariantCulture est librement basé sur en-US qui utilise , en tant que séparateur de milliers (groupe).

Votre résultat est ce que je m'attendais.

I, point aussi que vous les détails de l'N numeric format specifier: spécificateur format

Le numérique ("N") convertit un nombre à une chaîne de la forme "-d, ddd, ddd.ddd ..." , où "-" indique un symbole numérique négatif si nécessaire, "d" indique un chiffre (0-9), "," indique un séparateur de groupe et "." indique un symbole de point décimal.

2

Vous utilisez le invariant culture; votre culture n'a rien à voir avec cela. Pour cela, le format N4 signifie

-d,ddd,ddd,ddd... 

C'est-à-dire un indicateur de signe négatif possible et des virgules entre des milliers de groupes. Pour plus de détails voir: http://msdn.microsoft.com/en-us/library/dwhawy9k#NFormatString

Vous pouvez regarder

NegativeSign 
NumberNegativePattern 
NumberGroupSizes 
NumberGroupSeparator 
NumberDecimalSeparator 
NumberDecimalDigits 

pour la culture invariant. Si vous le faites, vous verrez:

- 
1 
{ 3 } 
, 
. 
2 
1

vous obtenez la virgule à cause de "{0: N4}"

n ----- Nombre de virgules pour des milliers --- - {0: n}
Source:

Vous obtiendrez la virgule même sans spécifier InvariantCulture

Console.WriteLine(string.Format("{0:n4}", 1008.0)); 
Questions connexes