it-swarm-tr.com

.NET String.Format (), bir sayı için binlerce yerde virgül eklemek için

Binlerce yerde bir sayı için virgül eklemek istiyorum. 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

Bunu en basit yol olarak buldum:

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

Kültüre özgü istiyorsanız, bunu denemek isteyebilirsiniz:

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

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

Not: Bazı kültürler , yerine ondalık demek için . kullanır, bu yüzden dikkatli olun.

91
prabir

Standart çıktılar, çıktıları ile birlikte,

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

Örnek çıktı (en-us kültürü):

(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

Bu en iyi format. Tüm bu durumlarda çalışır:

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)

Bu size ilgili noktalarda virgül verecektir.

31
Stephen Wrighton

En çok oy alan cevap harikaydı ve yaklaşık 7 senedir yardımcı oldu. C # 6.0 ve özellikle String Interpolation'ın tanıtımıyla daha düzenli ve daha IMO daha güvenli, sorulan şeyi yapmanın yolu var: 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

i değişkeni, yer tutucunun yerine yerleştirilir (ör. {0}). Böylece hangi nesnenin hangi konuma gittiğini hatırlamaya gerek yoktur. Biçimlendirme (ör. :n) değişmedi. Yeniliklerin tam bir özelliği için, bu sayfaya gidebilirsiniz .

27
von v.

bu kadar basit: 

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

daha fazla bilgi Burada

20
a_m_dev

Kültürden bağımsız olarak bir "," ayırıcıyı zorlamak istiyorsanız (örneğin, bir iz veya günlük iletisinde), aşağıdaki kod çalışacak ve tam olarak ne yaptığınızı tam olarak ne yaptığınızı söyleyen bir kişiye söyleme avantajına sahiptir.

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

"19,400,320" olarak biçimlendirilmiş kümeler

20
Ravi Desai

Aşağıdaki örnekte, sıfır yer tutucu içeren özel format dizeleri kullanılarak biçimlendirilmiş birkaç değer gösterilmektedir.

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

Veya

29255.0.ToString("N1")

sonuç "29,255.0"

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

Veya

29255.0.ToString("N2")

sonuç "29,255.00"

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

Örneğin String.Format("{0:0,0}", 1); 01'i döndürür, benim için geçerli değil

Bu benim için çalışıyor

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

Çıktı 19950000

9
cmujica

Biçimlendirdiğiniz değerin sayısal olması gerektiğini unutmayın .Bir sayı dizgesini gösterecek gibi görünmüyor ve biçim virgül ile.

8
gjc

Daha basit, String.Format yerine string enterpolasyonu kullanarak

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

veya değişkeninizi kullanarak

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

Sayıları biçimlendirmek ve isteğe bağlı olarak istenen ondalık basamağa geçmek için bu gibi bir işlev kullanabilirsiniz. Ondalık basamaklar belirtilmezse iki basamaklı basamak kullanır.

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

Ondalık kullanıyorum, ancak yazı tipini başka herhangi bir şeyle değiştirebilir veya adsız bir nesne kullanabilirsiniz. Negatif ondalık basamak değerleri için hata kontrolü de ekleyebilirsiniz.

3
dunwan

C # 7.1 (belki daha erken?) Bunu dize enterpolasyonu ile olması gerektiği kadar kolay ve Güzel görünümlü yapar:

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