Odpowiedzi:
String.Format("{0:n}", 1234); // Output: 1,234.00
String.Format("{0:n0}", 9876); // No digits after the decimal point. Output: 9,876
string.Format("{0:n0}", Double.Parse(yourValue));
Odkryłem, że jest to najprostszy sposób:
myInteger.ToString("N0")
int number = 1000000000;
string whatYouWant = number.ToString("#,##0");
//You get: 1,000,000,000
,jako separator tysięcy, na przykład spacja lub nawet ..
.), .NET automatycznie zastąpi przecinek tym separatorem. Ponownie zachęcam do przeczytania linku opublikowanego przez Rogera, jeśli nadal nie rozumiesz, dlaczego tak jest.
Standardowe formaty i powiązane z nimi dane wyjściowe,
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);
Przykładowy wynik (kultura en-us):
(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
To najlepszy format. Działa we wszystkich tych przypadkach:
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
String.Format("{0:#,###,###.##}", MyNumber)
To da ci przecinki w odpowiednich punktach.
Najczęściej głosowana odpowiedź była świetna i była pomocna przez około 7 lat. Wraz z wprowadzeniem C # 6.0, a konkretnie interpolacji ciągów, jest łatwiejszy i, IMO bezpieczniejszy, sposób na zrobienie tego, o co poproszono 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
Gdzie zmienna i jest wstawiana w miejsce symbolu zastępczego (tj {0}.). Nie trzeba więc pamiętać, który obiekt trafia w którą pozycję. Formatowanie (tj. :n) Nie uległo zmianie. Aby uzyskać pełną funkcję tego, co nowego, możesz przejść do tej strony .
Jeśli chcesz wymusić separator „,” bez względu na kulturę (na przykład w komunikacie śledzenia lub dziennika), poniższy kod będzie działał i ma dodatkową zaletę, mówiąc następnemu facetowi, który natknie się na niego dokładnie, co robisz.
int integerValue = 19400320;
string formatted = string.Format(CultureInfo.InvariantCulture, "{0:N0}", integerValue);
zestawy sformatowane na „19 400 300”
Poniższy przykład wyświetla kilka wartości, które są sformatowane przy użyciu niestandardowych ciągów formatu, które zawierają zero symboli zastępczych.
String.Format("{0:N1}", 29255.0);
Lub
29255.0.ToString("N1")
wynik „29 255,0”
String.Format("{0:N2}", 29255.0);
Lub
29255.0.ToString("N2")
wynik „29 255,00”
int num = 98765432;
Console.WriteLine(string.Format("{0:#,#}", num));
Pamiętaj, że formatowana wartość powinna być liczbowa. Nie wygląda na to, że zajmie ciąg reprezentujący liczbę, a format jest przecinkami.
String.Format("0,###.###"); also works with decimal places
C # 7.1 (może wcześniej?) Sprawia, że jest to tak łatwe i ładne, jak powinno być, z interpolacją ciągów:
var jackpot = 1000000;
var niceNumberString = $"Jackpot is {jackpot:n}";
var niceMoneyString = $"Jackpot is {jackpot:C}";
Możesz użyć takiej funkcji, aby sformatować liczby i opcjonalnie przekazać z żądanymi miejscami dziesiętnymi. Jeśli miejsca dziesiętne nie są określone, użyje dwóch miejsc dziesiętnych.
public static string formatNumber(decimal valueIn=0, int decimalPlaces=2)
{
return string.Format("{0:n" + decimalPlaces.ToString() + "}", valueIn);
}
Używam dziesiętnych, ale możesz zmienić typ na dowolny inny lub użyć obiektu anonimowego. Możesz także dodać sprawdzanie błędów pod kątem ujemnych wartości miejsc dziesiętnych.
Metodą, której nie martwiłem się już o kultury i potencjalne problemy z formatowaniem, jest to, że sformatowałem ją jako walutę, a następnie wyjąłem symbol waluty.
if (decimal.TryParse(tblCell, out result))
{
formattedValue = result.ToString("C").Substring(1);
}
fr-FR) Lub używa więcej niż jednego znaku do oznaczenia waluty (np. da-DK) Lub nie rozdziela tysięcy za pomocą przecinków (np. Większość Europy kontynentalnej).
Poniżej znajduje się dobre rozwiązanie w Javie!
NumberFormat fmt = NumberFormat.getCurrencyInstance();
System.out.println(fmt.format(n));
lub w celu uzyskania bardziej niezawodnego sposobu na uzyskanie lokalizacji danego miejsca, użyj poniższej instrukcji:
int n=9999999;
Locale locale = new Locale("en", "US");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
System.out.println(fmt.format(n));
WYDAJNOŚĆ US locale w USA : 9 999 999 USD
Dane wyjściowe w języku niemieckim
Locale locale = new Locale("de", "DE");
WYDAJNOŚĆ: 9.999.999,00 €
Dane wyjściowe ustawień regionalnych Indii
Locale locale = new Locale("de", "DE");
WYDAJNOŚĆ: Rs.9,999,999.00
Estońskie ustawienia regionalne
Locale locale = new Locale("et", "EE");
WYDAJNOŚĆ: 9 999 999 €
Jak widać na różnych wyjściach, nie musisz się martwić, że separator jest przecinkiem lub kropką, a nawet spacją , możesz sformatować liczbę zgodnie ze standardami i18n
locale użyłeś zmiennej ?
Jeśli chcesz pokazać go w DataGridview, powinieneś zmienić jego typ, ponieważ domyślnie jest to String, a ponieważ zmienisz go na dziesiętny, uważa się go za Liczba z liczbą zmiennoprzecinkową
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
String.Format("{0:#,##0}", 1234);działa również bez miejsc po przecinku.