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.