Chaîne.net.Format () pour ajouter des virgules en milliers place pour un nombre

Je veux ajouter une virgule dans la place des milliers pour un nombre. String.Format()?

681
demandé sur Tamir Vered 2008-09-20 01:26:21

20 réponses

String.Format("{0:n}", 1234); //Output: 1,234.00

string.Format("{0:n0}", 9876); // no digits after the decimal point. Output: 9,876
976
répondu Seibar 2016-12-07 16:42:14

J'ai trouvé que c'était le moyen le plus simple:

myInteger.ToString("N0")
303
répondu alchemical 2016-05-18 13:48:00
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000
128
répondu p.campbell 2010-05-19 17:26:35

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,00

Note: certaines cultures utilisent , pour signifier décimal plutôt que {[3] } alors soyez prudent.

86
répondu prabir 2014-12-23 11:18:22

Formats Standard, avec leurs sorties associées,

Console.WriteLine("Standard Numeric Format Specifiers");
String s = String.Format("(C) Currency: . . . . . . . . {0:C}\n" +
                    "(D) Decimal:. . . . . . . . . {0:D}\n" +
                    "(E) Scientific: . . . . . . . {1:E}\n" +
                    "(F) Fixed point:. . . . . . . {1:F}\n" +
                    "(G) General:. . . . . . . . . {0:G}\n" +
                    "    (default):. . . . . . . . {0} (default = 'G')\n" +
                    "(N) Number: . . . . . . . . . {0:N}\n" +
                    "(P) Percent:. . . . . . . . . {1:P}\n" +
                    "(R) Round-trip: . . . . . . . {1:R}\n" +
                    "(X) Hexadecimal:. . . . . . . {0:X}\n",
                    - 1234, -1234.565F);
Console.WriteLine(s);

Exemple de sortie (fr-fr culture):

(C) Currency: . . . . . . . . ($1,234.00)
(D) Decimal:. . . . . . . . . -1234
(E) Scientific: . . . . . . . -1.234565E+003
(F) Fixed point:. . . . . . . -1234.57
(G) General:. . . . . . . . . -1234
    (default):. . . . . . . . -1234 (default = 'G')
(N) Number: . . . . . . . . . -1,234.00
(P) Percent:. . . . . . . . . -123,456.50 %
(R) Round-trip: . . . . . . . -1234.565
(X) Hexadecimal:. . . . . . . FFFFFB2E
64
répondu CoderTao 2014-12-12 16:19:17

C'est le meilleur format. Fonctionne dans tous ces cas:

String.Format( "{0:#,##0.##}", 0 ); // 0
String.Format( "{0:#,##0.##}", 0.5 ); // 0.5 - some of the formats above fail here. 
String.Format( "{0:#,##0.##}", 12314 ); // 12,314
String.Format( "{0:#,##0.##}", 12314.23123 ); // 12,314.23
String.Format( "{0:#,##0.##}", 12314.2 ); // 12,314.2
String.Format( "{0:#,##0.##}", 1231412314.2 ); // 1,231,412,314.2
32
répondu Dennis 2015-07-09 23:43:49
String.Format("{0:#,###,###.##}", MyNumber)

Cela vous donnera des virgules aux points pertinents.

31
répondu Stephen Wrighton 2014-05-11 18:24:22

Si vous souhaitez forcer un séparateur", " indépendamment de la culture (par exemple dans un message de trace ou de journal), le code suivant fonctionnera et aura l'avantage supplémentaire de dire exactement ce que vous faites au prochain.

int integerValue = 19400320; 
string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue);

Définit formaté à "19 400 320"

19
répondu Ravi Desai 2013-03-27 19:55:29

La réponse la plus votée était géniale et a été utile pendant environ 7 ans. Avec L'introduction de C # 6.0 et plus précisément l'Interpolation de chaîne, il y a un moyen plus propre et, IMO 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

, la variable i est mis en place de l'espace réservé (c'est à dire {0}). Donc, il n'y a pas besoin de se rappeler quel objet va à quelle position. Le formatage (c'est-à-dire :n) n'a pas changé. Pour une fonctionnalité complète de ce qui est nouveau, vous pouvez aller à cette page.

19
répondu von v. 2015-08-12 02:51:49

L'exemple suivant affiche plusieurs valeurs formatées à l'aide de chaînes de format personnalisées qui n'incluent aucun espace réservé.

String.Format("{0:N1}", 29255.0);

Ou

29255.0.ToString("N1")

Résultat "29,255. 0"

String.Format("{0:N2}", 29255.0);

Ou

29255.0.ToString("N2")

Résultat "29,255. 00"

17
répondu Yitzhak Weinberg 2017-03-07 12:11:31

Tout simplement comme ceci:

float num = 23658; // for example 
num = num.ToString("N0"); // Returns 23,658

Plus d'infos dans Ici

17
répondu a_m_dev 2017-08-24 05:08:32
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
11
répondu p.campbell 2010-05-20 15:36:29

Par exemple String.Format("{0:0,0}", 1); retourne 01, pour moi, n'est pas valide

Cela fonctionne pour moi

19950000.ToString("#,#", CultureInfo.InvariantCulture));

Sortie 19,950,000

9
répondu cmujica 2012-10-23 21:19:57

Notez que la valeur que vous formatez doit être numérique. Il ne semble pas qu'il faudra une représentation de chaîne d'un nombre et le format est avec des virgules.

8
répondu 2008-10-12 00:35:09

Plus simple, en utilisant l'interpolation de chaîne au lieu de chaîne.Format

 $"{12456:n0}"; // 12,456
 $"{12456:n2}"; // 12,456.00

Ou en utilisant yourVariable

 double yourVariable = 12456.0;
 $"{yourVariable:n0}"; 
 $"{yourVariable:n2}"; 
7
répondu brakeroo 2016-11-02 20:22:05

Vous pouvez utiliser une fonction comme celle-ci pour formater les nombres et éventuellement passer aux décimales souhaitées. Si les décimales ne sont pas spécifiées, il utilisera deux décimales.

    public static string formatNumber(decimal valueIn=0, int decimalPlaces=2)
    {
        return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn);
    }

J'utilise decimal mais vous pouvez changer le type en un autre ou utiliser un objet anonyme. Vous pouvez également ajouter une vérification d'erreur pour les valeurs décimales négatives.

3
répondu dunwan 2014-12-23 11:13:38
String.Format("0,###.###"); also works with decimal places
2
répondu Abolfazl Rastgou 2018-02-13 12:20:52

La méthode que j'ai utilisée pour ne plus m'inquiéter des cultures et des problèmes de formatage potentiels est que je l'ai formaté en tant que monnaie et que j'ai retiré le symbole monétaire par la suite.

if (decimal.TryParse(tblCell, out result))

{
  formattedValue = result.ToString("C").Substring(1);
}
-2
répondu 8 John Volante 2012-06-13 09:55:01

Ci-dessous est une bonne solution en Java!

NumberFormat fmt = NumberFormat.getCurrencyInstance();
System.out.println(fmt.format(n));

Ou pour une manière plus robuste, vous pouvez obtenir les paramètres régionaux d'un endroit particulier, puis utiliser comme ci-dessous:

int n=9999999;
Locale locale = new Locale("en", "US");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
System.out.println(fmt.format(n));

NOUS paramètres Régionaux de SORTIE: $9,999,999.00

Allemand paramètres Régionaux de sortie

Locale locale = new Locale("de", "DE");

SORTIE: 9.999.999,00 €

Indien paramètres Régionaux de sortie

Locale locale = new Locale("de", "DE");

Sortie: Rs.9,999,999.00

L'Estonien Paramètres Régionaux sortie

Locale locale = new Locale("et", "EE");

SORTIE: 9 999 999 €

Comme vous pouvez le voir dans différentes sorties, vous n'avez pas à vous soucier que le séparateur soit un virgule ou point ou même Espace Vous pouvez obtenir le nombre formaté selon les normes i18n

-2
répondu Anirudh 2013-12-22 06:06:01

Si vous voulez l'afficher dans DataGridview, vous devez changer son type, car par défaut est String et puisque vous le changez en décimal, il considère comme un nombre à virgule flottante

Dim dt As DataTable = New DataTable
dt.Columns.Add("col1", GetType(Decimal))
dt.Rows.Add(1)
dt.Rows.Add(10)
dt.Rows.Add(2)

DataGridView1.DataSource = dt
-3
répondu Ali 2013-11-28 03:36:47