@VVVV - alors vous passez probablement une chaîne au lieu d'un nombre . Si vous avez une chaîne, vous devez d'abord la convertir en float ou en double. Trystring.Format("{0:n0}", Double.Parse(yourValue));
Vous pouvez également l'utiliser avec string.Format, comme dans string.Format ("Voici un certain nombre avec des virgules, et sans décimales, {0: N0}", 123456789 (;
Dan Morphis
16
ne devrait-il pas être myInteger.ToString ("N0") ... string.tostring je ne pense pas que cela fonctionnerait.
Taylor Brown
1
Je sais que ça fait 5 ans maintenant, mais merci! Cela fonctionne pour les nombres> 4 caractères et <4 caractères.
AskYous
@AskYous - Eh bien, cela fonctionne également pour 4 caractères .. Autant dire que cela fonctionne pour n'importe quelle longueur.
Broots Waymb
Cela fonctionne, mais il change sur les paramètres régionaux
saulyasar
149
int number =1000000000;string whatYouWant = number.ToString("#,##0");//You get: 1,000,000,000
Cette solution n'est pas bonne du point de vue de l'internationalisation - d'autres cultures utilisent des caractères autres que ,comme séparateur de milliers, par exemple un espace ou même ..
Justin
6
Fonctionne merci + 1. Ont étendu donc affiche jusqu'à 2 dp number.ToString ("#, ## 0. ##")
Crab Bucket
8
@MacSigler Ce n'est en fait pas vrai, voir le commentaire de Roger Lipscombe sur la réponse ci-dessus: String.Format appliquera automatiquement la localisation.
Dan Bechard
10
@MacSigler C'est la chose cependant, ce code n'imprime pas toujours une virgule. Uniquement lorsque la culture est celle qui attend des virgules (par exemple en-US ou invariant). Si la culture est celle qui attend un autre séparateur (par exemple .), .NET remplacera automatiquement la virgule par ce séparateur. Encore une fois, je vous invite à lire le lien publié par Roger si vous ne comprenez toujours pas pourquoi.
Dan Bechard
4
Le commentaire de @MacSigler Justin est toujours correct en ce que si vous ne forcez pas explicitement la culture à en-US, il héritera des paramètres de culture de la machine locale. Ma compréhension est que la compilation du code ci-dessus, puis son exécution sur deux machines avec des cultures différentes (avec des séparateurs de nombres différents) produiraient des résultats différents. Si vous voulez qu'il produise toujours une virgule, vous devez définir explicitement une culture qui utilise la virgule (par exemple invariante).
Dan Bechard
98
Si vous voulez une culture spécifique, vous pouvez essayer ceci:
Cette réponse contient de nombreuses informations utiles. En apprenant par l'exemple, je vois maintenant ce que signifient 0 et 1 dans le format de chaîne.
user420667
41
C'est le meilleur format. Fonctionne dans tous ces cas:
String.Format("{0:#,##0.##}",0);// 0String.Format("{0:#,##0.##}",0.5);// 0.5 - some of the formats above fail here. String.Format("{0:#,##0.##}",12314);// 12,314String.Format("{0:#,##0.##}",12314.23123);// 12,314.23String.Format("{0:#,##0.##}",12314.2);// 12,314.2String.Format("{0:#,##0.##}",1231412314.2);// 1,231,412,314.2
La méthode ": n" est meilleure car elle doit respecter les paramètres régionaux de l'utilisateur.
Torlack le
12
C'est vrai, mais il n'est pas garanti de vous donner des virgules au millier de points car il respecte les paramètres régionaux de l'utilisateur.
Stephen Wrighton,
2
tout de suite: c'est vrai, mais il n'est pas garanti de respecter les paramètres régionaux de l'utilisateur car il utilise des virgules comme séparateur de milliers. (Par exemple, au Portugal, la virgule est plutôt le séparateur décimal.)
ANeves
1
Si vous souhaitez appliquer des valeurs après le. vous devez remplacer le # par un 0. msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx : zéro remplace le zéro par le chiffre correspondant s'il y en a un; sinon, zéro apparaît dans la chaîne de résultat tandis que le symbole "#" est remplacé par le chiffre correspondant s'il y en a un; sinon, aucun chiffre n'apparaît dans la chaîne de résultat.
Clarice Bouwer
cette méthode fonctionnait bien pour mes besoins, la page msdn sur la méthode Int32.ToString qui serait un endroit principal, elle serait utilisée msdn.microsoft.com/en-us/library/8wch342y.aspx n'est pas très utile pour ce particulier application soit
stackuser83
33
La réponse la plus votée était excellente et utile depuis environ 7 ans. Avec l'introduction de C # 6.0 et plus précisément de l'interpolation de chaînes, il existe un moyen plus net et, plus sûr, de faire ce qui a été demandé to add commas in thousands place for a number:
var i =5222000;var s = $"{i:n} is the number";// results to > 5,222,000.00 is the number
s = $"{i:n0} has no decimal";// results to > 5,222,000 has no decimal
Où la variable i est mise en place de l'espace réservé (ie {0}). Il n'est donc pas nécessaire de se rappeler quel objet va dans quelle position. Le formatage (ie :n) n'a pas changé. Pour une fonctionnalité complète des nouveautés, vous pouvez aller sur cette page .
Si vous souhaitez forcer un séparateur "," quelle que soit la culture (par exemple dans un message de trace ou de journal), le code suivant fonctionnera et aura l'avantage supplémentaire de dire au gars suivant qui tombe dessus exactement ce que vous faites.
int integerValue =19400320;string formatted =string.Format(CultureInfo.InvariantCulture,"{0:N0}", integerValue);
@MaartenBodewes Je pensais qu'il y avait une lettre correspondante comme "N1", "F1" ou smth comme ça =) Mais chanter la culture fonctionnerait définitivement ..
Roxy'Pro
11
int num =98765432;Console.WriteLine(string.Format("{0:#,#}", num));
Notez que la valeur que vous formatez doit être numérique. Il ne semble pas qu'il faudra une représentation sous forme de chaîne d'un nombre et le format est avec des virgules.
Vous pouvez utiliser une fonction comme celle-ci pour formater les nombres et éventuellement passer les décimales souhaitées. Si aucune décimale n'est spécifiée, elle utilise deux décimales.
J'utilise décimal mais vous pouvez changer le type en n'importe quel autre ou utiliser un objet anonyme. Vous pouvez également ajouter une vérification d'erreur pour les valeurs de décimales négatives.
La méthode que j'ai utilisée pour ne plus me soucier des cultures et des problèmes de formatage potentiels est que je l'ai formatée en devise et j'ai ensuite retiré le symbole monétaire.
Ce code n'est pas indépendant de la culture - il utilisera la culture par défaut définie sur la machine exécutant le code. Cela pourrait créer une sortie indésirable où cette culture place ses symboles monétaires à la fin du nombre plutôt qu'au début (par exemple fr-FR), ou utilise plusieurs caractères pour désigner la devise (par exemple da-DK), ou ne sépare pas des milliers de virgules (par exemple, la plupart des de l'Europe continentale).
ou pour un moyen plus robuste, vous pouvez obtenir les paramètres régionaux d'un lieu particulier, puis utilisez comme ci-dessous:
int n=9999999;Locale locale =newLocale("en","US");NumberFormat fmt =NumberFormat.getCurrencyInstance(locale);System.out.println(fmt.format(n));
US Locale OUTPUT: 9 999 999,00 $
Sortie locale allemande
Locale locale =newLocale("de","DE");
SORTIE: 9.999.999,00 €
Sortie locale indienne
Locale locale =newLocale("de","DE");
SORTIE: Rs.9,999,999.00
Sortie en langue locale estonienne
Locale locale =newLocale("et","EE");
SORTIE: 9999 999 €
Comme vous pouvez le voir dans différentes sorties, vous n'avez pas à vous soucier du séparateur qui est une virgule ou un point ou même un espace, vous pouvez obtenir le nombre formaté selon les normes i18n
bien correctement repéré, est-il en fait à utiliser lors de l'obtention de l'instance de devise comme: NumberFormat fmt = NumberFormat.getCurrencyInstance (locale); corrigé le code, merci!
Anirudh
3
Avez-vous vérifié les balises? La question concerne C # et non Java!
Salar
-3
Si vous souhaitez l'afficher dans DataGridview, vous devez modifier son type, car la valeur par défaut est String et puisque vous le modifiez en décimal, il le considère comme un nombre avec virgule flottante.
Dim dt AsDataTable=NewDataTable
dt.Columns.Add("col1",GetType(Decimal))
dt.Rows.Add(1)
dt.Rows.Add(10)
dt.Rows.Add(2)DataGridView1.DataSource= dt
String.Format("{0:#,##0}", 1234);
fonctionne également sans décimales.string.Format("{0:n0}", Double.Parse(yourValue));
J'ai trouvé que c'était le moyen le plus simple:
la source
la source
,
comme séparateur de milliers, par exemple un espace ou même.
..
), .NET remplacera automatiquement la virgule par ce séparateur. Encore une fois, je vous invite à lire le lien publié par Roger si vous ne comprenez toujours pas pourquoi.Si vous voulez une culture spécifique, vous pouvez essayer ceci:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19 950 000,00(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00Remarque: Certaines cultures
,
signifient décimales plutôt que d'.
être prudent.la source
Formats standard, avec leurs sorties associées,
Exemple de sortie (culture en-us):
la source
C'est le meilleur format. Fonctionne dans tous ces cas:
la source
Cela vous donnera des virgules aux points pertinents.
la source
La réponse la plus votée était excellente et utile depuis environ 7 ans. Avec l'introduction de C # 6.0 et plus précisément de l'interpolation de chaînes, il existe un moyen plus net et, plus sûr, de faire ce qui a été demandé
to add commas in thousands place for a number
:Où la variable
i
est mise en place de l'espace réservé (ie{0}
). Il n'est donc pas nécessaire de se rappeler quel objet va dans quelle position. Le formatage (ie:n
) n'a pas changé. Pour une fonctionnalité complète des nouveautés, vous pouvez aller sur cette page .la source
aussi simple que cela:
plus d'informations sont ici
la source
Si vous souhaitez forcer un séparateur "," quelle que soit la culture (par exemple dans un message de trace ou de journal), le code suivant fonctionnera et aura l'avantage supplémentaire de dire au gars suivant qui tombe dessus exactement ce que vous faites.
ensembles formatés à "19 400 320"
la source
L'exemple suivant affiche plusieurs valeurs mises en forme à l'aide de chaînes de format personnalisé qui incluent zéro espace réservé.
Ou
résultat "29 255,0"
Ou
résultat "29 255,00"
la source
la source
Plus simple, en utilisant l'interpolation de chaînes au lieu de String.Format
ou en utilisant votreVariable
la source
Par exemple,
String.Format("{0:0,0}", 1);
renvoie 01, pour moi n'est pas valideÇa marche pour moi
sortie 19,950,000
la source
Notez que la valeur que vous formatez doit être numérique. Il ne semble pas qu'il faudra une représentation sous forme de chaîne d'un nombre et le format est avec des virgules.
la source
la source
C # 7.1 (peut-être plus tôt?) Rend cela aussi simple et agréable qu'il devrait l'être, avec une interpolation de chaîne:
la source
Vous pouvez utiliser une fonction comme celle-ci pour formater les nombres et éventuellement passer les décimales souhaitées. Si aucune décimale n'est spécifiée, elle utilise deux décimales.
J'utilise décimal mais vous pouvez changer le type en n'importe quel autre ou utiliser un objet anonyme. Vous pouvez également ajouter une vérification d'erreur pour les valeurs de décimales négatives.
la source
La méthode que j'ai utilisée pour ne plus me soucier des cultures et des problèmes de formatage potentiels est que je l'ai formatée en devise et j'ai ensuite retiré le symbole monétaire.
if (decimal.TryParse(tblCell, out result))
la source
fr-FR
), ou utilise plusieurs caractères pour désigner la devise (par exempleda-DK
), ou ne sépare pas des milliers de virgules (par exemple, la plupart des de l'Europe continentale).Voici une bonne solution en Java!
ou pour un moyen plus robuste, vous pouvez obtenir les paramètres régionaux d'un lieu particulier, puis utilisez comme ci-dessous:
US Locale OUTPUT: 9 999 999,00 $
Sortie locale allemande
SORTIE: 9.999.999,00 €
Sortie locale indienne
SORTIE: Rs.9,999,999.00
Sortie en langue locale estonienne
SORTIE: 9999 999 €
Comme vous pouvez le voir dans différentes sorties, vous n'avez pas à vous soucier du séparateur qui est une virgule ou un point ou même un espace, vous pouvez obtenir le nombre formaté selon les normes i18n
la source
locale
??Si vous souhaitez l'afficher dans DataGridview, vous devez modifier son type, car la valeur par défaut est String et puisque vous le modifiez en décimal, il le considère comme un nombre avec virgule flottante.
la source