2010-08-11 20 views
34

Je suis en train de formater le contenu d'une zone de texte:Comment insérer un séparateur de milliers (virgule) avec convert doubler

this.lblSearchResults1.Text = 
    Convert.ToDouble(lblSearchResults1.Text).ToString(); 

Comment puis-je modifier cela pour que je le texte inclut une virgule/mille séparateurs ?

dire 1000 au lieu de 1000.

+0

J'ai aussi trouvé cela très utile http://john-sheehan.com/blog/wp-content/uploads/msnet-formatting-strings.pdf –

+2

Regardez vers cette réponse http://stackoverflow.com/questions/752145/use-a-custom-thousand-separator-in-c –

Répondre

40

Pour un contrôle complet personnalisé, utilisez ... .ToString("#,##0.00") ou des variations de ceux-ci. Vous pouvez faire vos propres images, comme 0.0#

Pour utiliser un modèle en fonction des utilisateurs (ou sur un élément sélectionné) la culture, utilisez The Numeric ("N") Format Specifier, comme dans .ToString("N") ou "... {0:N}".

+0

Je suis cette approche, mais j'obtiens un résultat inversé sur Windows Server 2012, '530000' devient' 000,530' – Akbari

+0

Recherche approfondie et peut-être poster une question séparée avec un [exemple vérifiable] (http://stackoverflow.com/help/mcve). Inclure les paramètres de culture de l'ordinateur. –

62

En regardant le standard numeric format strings:

Vous pouvez plus facilement utiliser « N » qui fera la bonne chose en fonction de la culture de l'utilisateur, donc dans votre cas, vous pouvez simplement ajouter « N » comme param au ToString

([double]12345.67).ToString("N") 

12,345.67

+13

Ceci devrait être la réponse acceptée. – jwueller

+0

Cette réponse est légèrement meilleure que ToString ("#, ## 0.00"), qui fonctionne de la même manière et respecte également les différents séparateurs de milliers de cultures différentes (par exemple "." En Allemagne et "" en Suisse). Mais ToString ("N") rend plus clair que le format peut être spécifique à la culture. – Knasterbax

+0

Respect de la culture individuelle sur celui-ci obtient la victoire pour moi.Cependant, qu'en est-il de l'affichage d'un nombre entier en tant qu'entier, plutôt qu'un flottant? – Xonatron

0

La façon de le faire serait quelque chose comme plus facile:

Convert.ToDouble("1234567.12345").ToString("N") 

Si vous souhaitez contrôler les décimales que vous pouvez faire quelque chose comme:

Convert.ToDouble("1234567.12345").ToString("N3") 

En regard général sur les ToString sur des surcharges possibilités plus intéressantes.

4

Si vous regardez de plus près Standard Numeric Format Strings vous pouvez essayer une des opérations suivantes:

.ToString("n", CultureInfo.GetCultureInfo("en-US")) 
.ToString("n", CultureInfo.GetCultureInfo("de-DE")) 
.ToString("n", CultureInfo.CurrentCulture) 
5

Une alternative au serait d'utiliser mentionnées ci-dessus réponses

this.lblSearchResults1.Text = String.Format("{0:N}", Convert.ToDouble(lblSearchResults1.Text)) 

Si vous vouliez décimales , il suffit d'entrer la quantité de décimales que vous souhaitez avoir après le N. L'exemple suivant va retourner la valeur avec 2 décimales.

this.lblSearchResults1.Text = String.Format("{0:N2}", Convert.ToDouble(lblSearchResults1.Text)) 

Voir http://msdn.microsoft.com/en-us/library/system.string.format.aspx pour plus d'informations.