@VVVV - maka Anda mungkin melewati string bukan angka . Jika Anda memiliki string, Anda harus terlebih dahulu mengonversi menjadi float atau double. Cobastring.Format("{0:n0}", Double.Parse(yourValue));
Anda juga dapat menggunakannya dengan string.Format, seperti dalam string.Format ("Berikut adalah beberapa angka dengan koma, dan tanpa desimal, {0: N0}", 123456789 (;
Dan Morphis
16
seharusnya tidak menjadi myInteger.ToString ("N0") ... string.tostring saya tidak berpikir akan berhasil.
Taylor Brown
1
Saya tahu ini sudah 5 tahun sekarang, tapi terima kasih! Ini berfungsi untuk angka> 4 karakter, dan <4 karakter.
AskYous
@AskYous - Yah, itu juga berfungsi untuk 4 karakter .. Bisa juga mengatakan itu bekerja untuk waktu yang lama.
Broots Waymb
Ini berfungsi tetapi itu berubah pada pengaturan regional
saulyasar
149
int number =1000000000;string whatYouWant = number.ToString("#,##0");//You get: 1,000,000,000
Solusi ini tidak baik dari sudut pandang internasionalisasi - budaya lain menggunakan karakter selain ,sebagai pemisah ribuan, misalnya spasi atau genap ..
Justin
6
Berfungsi + 1. Telah diperluas sehingga menampilkan hingga 2 nomor dp. Melakukan Strtring ("#, ## 0. ##")
Crab Bucket
8
@ MacSigler Ini sebenarnya tidak benar, lihat komentar Roger Lipscombe pada jawaban di atas: String.Format akan menerapkan pelokalan secara otomatis.
Dan Bechard
10
@ MacSigler Itulah masalahnya, kode ini tidak selalu mencetak koma. Hanya ketika budaya adalah budaya yang mengharapkan koma (mis. En-AS atau invarian). Jika budaya adalah salah satu yang mengharapkan pemisah lain (misalnya .), .NET akan secara otomatis mengganti koma dengan pemisah itu. Sekali lagi, saya mendorong Anda untuk membaca tautan yang diposting oleh Roger jika Anda masih tidak mengerti mengapa ini terjadi.
Dan Bechard
4
@MacSigler Komentar Justin masih benar karena jika Anda tidak secara eksplisit memaksa budaya ke en-AS, itu akan mewarisi pengaturan budaya dari mesin lokal. Pemahaman saya adalah bahwa mengkompilasi kode di atas, kemudian menjalankannya pada dua mesin dengan budaya yang berbeda (dengan pemisah jumlah yang berbeda) akan menghasilkan hasil yang berbeda. Jika Anda ingin selalu menghasilkan koma, Anda perlu menetapkan budaya yang menggunakan koma secara eksplisit (mis. Invarian).
Dan Bechard
98
Jika Anda ingin spesifik budaya, Anda mungkin ingin mencoba ini:
Metode ": n" lebih baik karena harus menghormati lokal pengguna.
Torlack
12
Ini benar, tetapi tidak dijamin memberi Anda koma pada titik ribuan karena itu menghormati lokal pengguna.
Stephen Wrighton
2
langsung kembali kepada Anda: itu benar, tetapi tidak dijamin untuk menghormati lokal pengguna karena menggunakan koma sebagai pemisah ribuan. (Sebagai contoh, di Portugal koma bukan pemisah desimal.)
ANeves
1
Jika Anda ingin menerapkan nilai setelah. Anda perlu mengganti # dengan 0. msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx : Nol menggantikan nol dengan angka yang sesuai jika ada; jika tidak, nol muncul di string hasil sedangkan simbol "#" diganti dengan digit yang sesuai jika ada; jika tidak, tidak ada digit yang muncul di string hasil.
Clarice Bouwer
metode ini berfungsi baik untuk kebutuhan saya, halaman msdn tentang metode Int32.ToString yang akan menjadi tempat utama itu akan digunakan msdn.microsoft.com/en-us/library/8wch342y.aspx tidak terlalu membantu untuk hal ini aplikasi baik
stackuser83
33
Jawaban yang paling banyak dipilih sangat bagus dan telah membantu selama sekitar 7 tahun. Dengan diperkenalkannya C # 6.0 dan khususnya Interpolasi String ada cara yang lebih rapi dan, lebih aman, untuk melakukan apa yang diminta 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
Di mana variabel i ditempatkan menggantikan placeholder (yaitu {0}). Jadi tidak perlu mengingat objek mana yang menuju ke posisi mana. Format (yaitu :n) tidak berubah. Untuk fitur lengkap tentang apa yang baru, Anda dapat pergi ke halaman ini .
Jika Anda ingin memaksakan pemisah "," terlepas dari budaya (misalnya dalam jejak atau pesan log), kode berikut ini akan berfungsi dan memiliki manfaat tambahan untuk memberi tahu orang berikutnya yang menemukan apa yang sedang Anda lakukan.
int integerValue =19400320;string formatted =string.Format(CultureInfo.InvariantCulture,"{0:N0}", integerValue);
jawaban yang bagus tapi bagaimana dengan 29.255,00?
Roxy'Pro
@ Roxy'Pro Mengubah lokal / budaya?
Maarten Bodewes
@ MaartenBodewes saya pikir ada surat yang sesuai seperti "N1", "F1" atau pertanda seperti itu =) Tapi budaya chaning pasti akan berfungsi dengan baik ..
Roxy'Pro
11
int num =98765432;Console.WriteLine(string.Format("{0:#,#}", num));
Anda dapat menggunakan fungsi seperti ini untuk memformat angka dan meneruskan tempat desimal yang diinginkan. Jika tempat desimal tidak ditentukan akan menggunakan dua tempat desimal.
Saya menggunakan desimal tetapi Anda dapat mengubah jenisnya ke yang lain atau menggunakan objek anonim. Anda juga bisa menambahkan pengecekan error untuk nilai tempat desimal negatif.
Metode yang saya gunakan untuk tidak khawatir lagi tentang budaya dan potensi masalah pemformatan adalah bahwa saya memformatnya sebagai mata uang dan mengeluarkan simbol mata uang setelahnya.
Kode ini tidak bebas kultur - kode ini akan menggunakan kultur bawaan apa pun yang diset pada mesin yang menjalankan kode. Ini dapat membuat output yang tidak diinginkan di mana budaya itu menempatkan simbol mata uang mereka di akhir angka daripada awal (misalnya fr-FR), atau menggunakan lebih dari satu karakter untuk menunjukkan mata uang (misalnya da-DK), atau tidak memisahkan ribuan menggunakan koma (misalnya sebagian besar dari daratan Eropa).
atau untuk cara yang lebih kuat Anda mungkin ingin mendapatkan lokal tempat tertentu, kemudian gunakan seperti di bawah ini:
int n=9999999;Locale locale =newLocale("en","US");NumberFormat fmt =NumberFormat.getCurrencyInstance(locale);System.out.println(fmt.format(n));
OUTPUT Lokal AS : $ 9.999.999,00
Output Lokal Jerman
Locale locale =newLocale("de","DE");
OUTPUT: 9.999.999,00 €
Output Lokal India
Locale locale =newLocale("de","DE");
OUTPUT: Rs.9.999.999,00
Output Lokal Estonia
Locale locale =newLocale("et","EE");
OUTPUT: 9 999 999 €
Seperti yang dapat Anda lihat di keluaran yang berbeda, Anda tidak perlu khawatir pemisah menjadi koma atau titik atau bahkan ruang, Anda bisa mendapatkan nomor yang diformat sesuai dengan standar i18n
terlihat dengan benar, apakah itu benar untuk digunakan saat mendapatkan contoh mata uang seperti: NumberFormat fmt = NumberFormat.getCurrencyInstance (lokal); memperbaiki kode, terima kasih!
Anirudh
3
Sudahkah Anda memeriksa tag? Pertanyaannya adalah tentang C # bukan Java!
Salar
-3
Jika Anda ingin menampilkannya di DataGridview, Anda harus mengubah tipenya, karena defaultnya adalah String dan karena Anda mengubahnya menjadi desimal dianggap sebagai Angka dengan titik mengambang
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);
juga berfungsi tanpa tempat desimal.string.Format("{0:n0}", Double.Parse(yourValue));
Saya menemukan ini sebagai cara paling sederhana:
sumber
sumber
,
sebagai pemisah ribuan, misalnya spasi atau genap.
..
), .NET akan secara otomatis mengganti koma dengan pemisah itu. Sekali lagi, saya mendorong Anda untuk membaca tautan yang diposting oleh Roger jika Anda masih tidak mengerti mengapa ini terjadi.Jika Anda ingin spesifik budaya, Anda mungkin ingin mencoba ini:
(19950000.0).ToString("N",new CultureInfo("en-US"))
= 19.950.000,00(19950000.0).ToString("N",new CultureInfo("is-IS"))
= 19.950.000,00Catatan: Beberapa budaya menggunakan
,
desimal daripada.
berhati-hati.sumber
Format standar, dengan output terkait,
Contoh output (en-us culture):
sumber
Ini format terbaik. Bekerja dalam semua kasus tersebut:
sumber
Itu akan memberi Anda koma pada titik yang relevan.
sumber
Jawaban yang paling banyak dipilih sangat bagus dan telah membantu selama sekitar 7 tahun. Dengan diperkenalkannya C # 6.0 dan khususnya Interpolasi String ada cara yang lebih rapi dan, lebih aman, untuk melakukan apa yang diminta
to add commas in thousands place for a number
:Di mana variabel
i
ditempatkan menggantikan placeholder (yaitu{0}
). Jadi tidak perlu mengingat objek mana yang menuju ke posisi mana. Format (yaitu:n
) tidak berubah. Untuk fitur lengkap tentang apa yang baru, Anda dapat pergi ke halaman ini .sumber
sesederhana ini:
info lebih lanjut ada di Sini
sumber
Jika Anda ingin memaksakan pemisah "," terlepas dari budaya (misalnya dalam jejak atau pesan log), kode berikut ini akan berfungsi dan memiliki manfaat tambahan untuk memberi tahu orang berikutnya yang menemukan apa yang sedang Anda lakukan.
set diformat ke "19.400.320"
sumber
Contoh berikut menampilkan beberapa nilai yang diformat dengan menggunakan string format kustom yang menyertakan tempat penampung nol.
Atau
hasil "29.255.0"
Atau
hasil "29.255,00"
sumber
sumber
Lebih sederhana, menggunakan interpolasi string, bukan String.Format
atau menggunakan Variabel Anda
sumber
Misalnya
String.Format("{0:0,0}", 1);
mengembalikan 01, bagi saya tidak validIni bekerja untuk saya
output 19.950.000
sumber
Perhatikan bahwa nilai yang Anda format harus berupa angka. Tampaknya tidak akan membutuhkan representasi string dari angka dan format dengan koma.
sumber
sumber
C # 7.1 (mungkin sebelumnya?) Menjadikan ini mudah dan terlihat bagus seperti seharusnya, dengan interpolasi string:
sumber
Anda dapat menggunakan fungsi seperti ini untuk memformat angka dan meneruskan tempat desimal yang diinginkan. Jika tempat desimal tidak ditentukan akan menggunakan dua tempat desimal.
Saya menggunakan desimal tetapi Anda dapat mengubah jenisnya ke yang lain atau menggunakan objek anonim. Anda juga bisa menambahkan pengecekan error untuk nilai tempat desimal negatif.
sumber
Metode yang saya gunakan untuk tidak khawatir lagi tentang budaya dan potensi masalah pemformatan adalah bahwa saya memformatnya sebagai mata uang dan mengeluarkan simbol mata uang setelahnya.
if (decimal.TryParse(tblCell, out result))
sumber
fr-FR
), atau menggunakan lebih dari satu karakter untuk menunjukkan mata uang (misalnyada-DK
), atau tidak memisahkan ribuan menggunakan koma (misalnya sebagian besar dari daratan Eropa).Di bawah ini adalah solusi yang bagus di Jawa!
atau untuk cara yang lebih kuat Anda mungkin ingin mendapatkan lokal tempat tertentu, kemudian gunakan seperti di bawah ini:
OUTPUT Lokal AS : $ 9.999.999,00
Output Lokal Jerman
OUTPUT: 9.999.999,00 €
Output Lokal India
OUTPUT: Rs.9.999.999,00
Output Lokal Estonia
OUTPUT: 9 999 999 €
Seperti yang dapat Anda lihat di keluaran yang berbeda, Anda tidak perlu khawatir pemisah menjadi koma atau titik atau bahkan ruang, Anda bisa mendapatkan nomor yang diformat sesuai dengan standar i18n
sumber
locale
??Jika Anda ingin menampilkannya di DataGridview, Anda harus mengubah tipenya, karena defaultnya adalah String dan karena Anda mengubahnya menjadi desimal dianggap sebagai Angka dengan titik mengambang
sumber