2010-03-30 13 views
24

Używanie String.Format Jak mogę zapewnić, że wszystkie liczby mają przecinki po każdych 3 cyfrach np. 23000 = "23 000" i że 0 zwraca "0".dodaj przecinki, używając String.Format dla numeru i

String.Format ("{0: n}", 0); // daje 0.00, którego nie chcę. Nie chcę żadnych miejsc dziesiętnych, wszystkie liczby będą liczbami całkowitymi.

+0

Nie należy używać przecinków do oddzielania cyfr, należy używać (miękkich) spacji. Powodem jest to, że w znacznej części świata (przecinek) jest to separator dziesiętny (punkt radix), a więc znaczenie przecinka jest subiektywne, zależny od kontekstu - patrz Wikipedia http://en.wikipedia.org/wiki/Decimal_separator#Digit_grouping. – ANeves

+1

Nie należy przecinać w sposób ciągły przecinkami, ale należy użyć separatora tysięcy lokalizacji lub internacjonalizacji. Użyj przecinka jako domyślnego, jeśli chcesz, gdy nie jest ustawione żadne ustawienie regionalne. – mpez0

Odpowiedz

51

Można to, co znajdę czystsze bit zrobić, aby odczytać intencję:

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

Przykład:

string.Format("{0:#,###0}", 123456789); // 123,456,789 
string.Format("{0:#,###0}", 0); // 0 
+0

to zwraca "" – raklos

+2

@raklos - Nieodebrane 0 podczas pisania, właśnie zaktualizowane. –

+1

bingo, działa teraz;) – raklos

26

Jeśli bieżąca kultura seting używa przecinków jako separator tysięcy, można po prostu sformatować go jako liczbę z zerem po przecinku:

String.Format("{0:N0}", 0) 

czyli

0.ToString("N0") 
+7

+1 za podanie kultury –

2

Można też poeksperymentować trochę z obiektem CultureInfo, jeśli żaden z innych rozwiązań działać dobrze dla ciebie:

 var x = CultureInfo.CurrentCulture; 
     x.NumberFormat.NumberDecimalSeparator = ","; 
     x.NumberFormat.NumberDecimalDigits = 0; 
     x.NumberFormat.NumberGroupSizes = new int[] {3}; 
1

można umieścić numer po N, aby określić liczbę cyfr po przecinku :

String.Format("{0:n0}", 0) // gives 0 
3

z msdn

double value = 1234567890; 
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture)); 

Wyświetla 1,234,567,890

+0

Strzeż się tego: wygeneruje pusty ciąg dla wartości = 0, co jest z pewnością co chce OP. Zamiast tego użyj "#, 0" jako wzoru i będzie dobrze. – AFract

0

Podniosłem kolejną odpowiedź, a następnie stwierdziłem, że wartości zerowe są pustymi ciągami.

 System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("de-DE"); 
     System.Threading.Thread.CurrentThread.CurrentCulture = ci; 

     double x = 23232323.21; 
     string y = x.ToString("#,0", System.Globalization.CultureInfo.CurrentCulture); 

Łańcuch zwracany jest w obecnej kulturze, która jest niemiecki zatem y = 23.232.323

y = 0, gdy x = 0.

0

wystarczy umieścić go w ten sposób:

Console.WriteLine(**$**"Your current amount of money is: **{yourVar:c}**"); 
Powiązane problemy