@VVVV - wtedy prawdopodobnie przekazujesz ciąg zamiast liczby . Jeśli masz ciąg, musisz najpierw przekonwertować na zmiennoprzecinkowe lub podwójne. Spróbujstring.Format("{0:n0}", Double.Parse(yourValue));
To rozwiązanie nie jest dobre z punktu widzenia internacjonalizacji - inne kultury używają znaków innych niż ,jako separator tysięcy, na przykład spacja lub nawet ..
Justin
6
Działa dzięki + 1. Mam rozszerzone, więc pokazuje do 2 numerów dp. ToString ("#, ## 0. ##")
Crab Bucket
8
@MacSigler W rzeczywistości to nieprawda, zobacz komentarz Rogera Lipscombe do powyższej odpowiedzi: String.Format automatycznie zastosuje lokalizację.
Dan Bechard
10
@MacSigler Tyle że ten kod nie zawsze drukuje przecinek. Tylko wtedy, gdy kultura oczekuje przecinków (np. En-US lub niezmiennik). Jeśli kultura oczekuje innej separacji (np. .), .NET automatycznie zastąpi przecinek tym separatorem. Ponownie zachęcam do przeczytania linku opublikowanego przez Rogera, jeśli nadal nie rozumiesz, dlaczego tak jest.
Dan Bechard
4
@MacSigler Komentarz Justina jest nadal poprawny, ponieważ jeśli nie wymusisz wyraźnie kultury na en-US, odziedziczy ustawienia kultury z lokalnego komputera. Rozumiem, że skompilowanie powyższego kodu, a następnie uruchomienie go na dwóch komputerach z różnymi kulturami (z różnymi separatorami liczb) dałoby różne wyniki. Jeśli chcesz, aby zawsze tworzył przecinek, musisz jawnie ustawić kulturę, która używa przecinka (np. Niezmiennik).
Dan Bechard
98
Jeśli chcesz specyficzne dla kultury, spróbuj tego:
Metoda „: n” jest lepsza, ponieważ powinna uwzględniać ustawienia regionalne użytkownika.
Torlack,
12
To prawda, ale nie jest gwarantowane, aby podawać przecinki w tysiącach punktów, ponieważ respektują ustawienia regionalne użytkownika.
Stephen Wrighton,
2
od razu do ciebie: to prawda, ale nie ma gwarancji poszanowania ustawień regionalnych użytkownika, ponieważ używa przecinków jako separatora tysięcy. (Na przykład w Portugalii przecinek jest separatorem dziesiętnym).
ANeves
1
Jeśli chcesz wymusić wartości po. musisz zamienić # na 0. msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx : Zero zastępuje zero odpowiednią cyfrą, jeśli jest obecna; w przeciwnym razie zero pojawi się w ciągu wynikowym, podczas gdy symbol „#” zostanie zastąpiony odpowiednią cyfrą, jeśli jest obecna; w przeciwnym razie w ciągu wynikowym nie pojawi się żadna cyfra.
Clarice Bouwer
ta metoda działała dobrze dla moich wymagań, strona msdn o metodzie Int32.ToString, która byłaby głównym miejscem, w którym byłaby używana msdn.microsoft.com/en-us/library/8wch342y.aspx nie jest bardzo pomocna w tym przypadku albo aplikacja
stackuser83
33
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);
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.
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.
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.
Ten kod nie jest niezależny od kultury - użyje dowolnej domyślnej kultury na komputerze z uruchomionym kodem. Może to powodować niepożądane rezultaty, w których kultura umieszcza symbole walut na końcu numeru zamiast na początku (np. 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).
lub w celu uzyskania bardziej niezawodnego sposobu na uzyskanie lokalizacji danego miejsca, użyj poniższej instrukcji:
int n=9999999;Locale locale =newLocale("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 =newLocale("de","DE");
WYDAJNOŚĆ: 9.999.999,00 €
Dane wyjściowe ustawień regionalnych Indii
Locale locale =newLocale("de","DE");
WYDAJNOŚĆ: Rs.9,999,999.00
Estońskie ustawienia regionalne
Locale locale =newLocale("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
dobrze zauważony, czy rzeczywiście jest używany podczas pobierania wystąpienia waluty, np .: NumberFormat fmt = NumberFormat.getCurrencyInstance (ustawienia regionalne); poprawiłem kod, dzięki!
Anirudh,
3
Czy sprawdziłeś tagi? Pytanie dotyczy C # a nie Java!
Salar,
-3
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 AsDataTable=NewDataTable
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.string.Format("{0:n0}", Double.Parse(yourValue));
Odkryłem, że jest to najprostszy sposób:
źródło
źródło
,
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.Jeśli chcesz specyficzne dla kultury, spróbuj tego:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19 950 000,00(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00Uwaga: niektóre kultury używają
,
oznaczenia dziesiętnego, a nie.
ostrożnego.źródło
Standardowe formaty i powiązane z nimi dane wyjściowe,
Przykładowy wynik (kultura en-us):
źródło
To najlepszy format. Działa we wszystkich tych przypadkach:
źródło
To da ci przecinki w odpowiednich punktach.
źródło
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
: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 .źródło
tak proste jak to:
więcej informacji znajduje się tutaj
źródło
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.
zestawy sformatowane na „19 400 300”
źródło
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.
Lub
wynik „29 255,0”
Lub
wynik „29 255,00”
źródło
źródło
Prostsze, używając interpolacji ciągów zamiast String.Format
lub używając yourVariable
źródło
Na przykład
String.Format("{0:0,0}", 1);
zwraca 01, dla mnie nie jest poprawnyTo działa dla mnie
produkcja 19 950 000
źródło
Pamiętaj, że formatowana wartość powinna być liczbowa. Nie wygląda na to, że zajmie ciąg reprezentujący liczbę, a format jest przecinkami.
źródło
źródło
C # 7.1 (może wcześniej?) Sprawia, że jest to tak łatwe i ładne, jak powinno być, z interpolacją ciągów:
źródło
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.
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.
źródło
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))
źródło
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!
lub w celu uzyskania bardziej niezawodnego sposobu na uzyskanie lokalizacji danego miejsca, użyj poniższej instrukcji:
WYDAJNOŚĆ US locale w USA : 9 999 999 USD
Dane wyjściowe w języku niemieckim
WYDAJNOŚĆ: 9.999.999,00 €
Dane wyjściowe ustawień regionalnych Indii
WYDAJNOŚĆ: Rs.9,999,999.00
Estońskie ustawienia regionalne
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
źródło
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ą
źródło