it-swarm-eu.dev

.NET String.Format () pro přidání čárky v tisících

Chci přidat čárku na tisíce místo pro číslo. String.Format()?

722
Seibar
String.Format("{0:n}", 1234);  // Output: 1,234.00
String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876
1038
Seibar

Zjistil jsem, že je to nejjednodušší způsob:

myInteger.ToString("N0")
321
alchemical
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000
134
Ope Adeoye

Pokud chcete specifickou kulturu, můžete zkusit toto:

(19950000.0).ToString("N",new CultureInfo("en-US")) = 19,950,000,00

(19950000.0).ToString("N",new CultureInfo("is-IS")) = 19.950.000,00

Poznámka: Některé kultury používají , spíše jako desetinné místo ., takže buďte opatrní.

91
prabir

Standardní formáty s jejich výstupy,

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);

Příklad výstupu (en-us 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
67
CoderTao

To je nejlepší formát. Pracuje ve všech těchto případech:

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
36
Dennis
String.Format("{0:#,###,###.##}", MyNumber)

To vám dá čárky v příslušných bodech.

31
Stephen Wrighton

Nejvíce hlasovaná odpověď byla skvělá a byla užitečná asi 7 let. Se zavedením C # 6.0 a specificky String Interpolation je zde neater a bezpečnější IMO způsob, jak dělat to, co bylo požadováno 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

Kde je proměnná i umístěna na místo zástupného symbolu (tj. {0}). Takže není třeba si pamatovat, který objekt jde do které polohy. Formátování (tj. :n) se nezměnilo. Pro úplnou funkci toho, co je nového, můžete přejít na tuto stránku .

27
von v.

prostě jednoduché: 

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

více informací je v Zde

20
a_m_dev

Pokud si přejete vynutit oddělovač "," bez ohledu na kulturu (například ve stopě nebo ve zprávě protokolu), následující kód bude fungovat a bude mít další výhodu v tom, že řekne dalšímu člověku, který na něj narazí, přesně, co děláte.

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

nastaví formát na hodnotu "19,400,320"

20
Ravi Desai

Následující příklad zobrazuje několik hodnot, které jsou formátovány pomocí vlastních formátovacích řetězců, které obsahují nulové symboly.

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

Nebo

29255.0.ToString("N1")

výsledek "29,255,0"

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

Nebo

29255.0.ToString("N2")

výsledek "29,255.00"

19
Yitzhak Weinberg
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
11
p.campbell

Například String.Format("{0:0,0}", 1); vrací 01, pro mě není platný

To funguje pro mě

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

výstup 19,950,000

9
cmujica

Mějte na paměti, že hodnota, kterou formátujete, by měla být číselná. Nevypadá to, že by číslování a formátování obsahovaly čárky.

8
gjc

Jednodušší, pomocí řetězcové interpolace místo String.Format

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

nebo pomocí proměnné

 double yourVariable = 12456.0;
 $"{yourVariable:n0}"; 
 $"{yourVariable:n2}"; 
7
brakeroo
String.Format("0,###.###"); also works with decimal places
4
Abolfazl Rastgou

Funkci, jako je tato, můžete použít k formátování čísel a volitelně k přechodu na požadovaná desetinná místa. Pokud nejsou zadána desetinná místa, použije se dvě desetinná místa.

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

Používám desetinné, ale můžete změnit typ na jiné nebo použít anonymní objekt. Můžete také přidat kontrolu chyb pro záporné hodnoty desetinného místa.

3
dunwan

C # 7.1 (snad dříve?) Je tak snadné a hezké, jak by mělo být, s interpolací řetězce:

var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
0
Mark Zhukovsky