Saya telah mendapatkan bidang harga untuk ditampilkan yang kadang-kadang bisa 100 atau 100,99 atau 100,9. Yang saya inginkan adalah menampilkan harga di 2 tempat desimal hanya jika desimalnya dimasukkan untuk harga itu, misalnya jika angka 100 maka seharusnya hanya 100 menunjukkan 100 bukan 100,00 dan jika harga 100,2 itu harus menampilkan 100,20 sama untuk 100,22 harus sama. Saya mencari di Google dan menemukan beberapa contoh tetapi mereka tidak cocok persis dengan apa yang saya inginkan:
// just two decimal places
String.Format("{0:0.00}", 123.4567); // "123.46"
String.Format("{0:0.00}", 123.4); // "123.40"
String.Format("{0:0.00}", 123.0); // "123.00"
Jawaban:
Cara yang salah adalah:
Dengan
DoFormat
menjadi sesuatu seperti:Tidak elegan tetapi bekerja untuk saya dalam situasi serupa di beberapa proyek.
sumber
CurrentCulture
, pemisah desimal mungkin tidak.
. KecualiCultureInfo.InvariantCulture
digunakanstring.Format
, Anda harus memeriksa nilainyaCultureInfo.NumberFormat.NumberDecimalSeparator
, dan itu akan menjadi PITA nyata. :)60000
int dan saya menginginkannya60.000
?Maaf karena mengaktifkan kembali pertanyaan ini, tetapi saya tidak menemukan jawaban yang tepat di sini.
Dalam memformat angka Anda dapat menggunakan
0
sebagai tempat wajib dan#
sebagai tempat opsional.Begitu:
Anda juga dapat menggabungkan
0
dengan#
.Untuk metode formating ini selalu digunakan
CurrentCulture
. Untuk beberapa Budaya.
akan diubah menjadi,
.Jawab pertanyaan awal:
Solusi paling sederhana datang dari @Andrew (di sini ). Jadi saya pribadi akan menggunakan sesuatu seperti ini:
sumber
Ini adalah kasus penggunaan pemformatan angka mengambang yang umum.
Sayangnya, semua string format satu huruf bawaan (mis. F, G, N) tidak akan mencapainya secara langsung.
Misalnya,
num.ToString("F2")
akan selalu menampilkan 2 tempat desimal seperti123.40
.Anda harus menggunakan
0.##
pola walaupun terlihat sedikit bertele-tele.Contoh kode lengkap:
sumber
Pertanyaan lama tapi saya ingin menambahkan opsi paling sederhana menurut saya.
Tanpa ribuan pemisah:
Dengan ribuan pemisah:
Sama tetapi dengan String.Format :
Jika Anda membutuhkannya di banyak tempat , saya akan menggunakan logika ini dalam metode ekstensi :
sumber
mencoba
sumber
Saya tidak tahu bagaimana cara memasukkan syarat dalam format specifier, tetapi Anda dapat menulis formatter Anda sendiri:
sumber
Berikut adalah alternatif untuk metode Uwe Keim, yang masih akan mempertahankan panggilan metode yang sama:
Dengan
MyCustomFormat
menjadi sesuatu seperti:sumber
CurrentCulture
, pemisah desimal mungkin tidak.
. Kecuali jikaCultureInfo.InvariantCulture
digunakanstring.Format
, Anda harus memeriksa nilaiCultureInfo.NumberFormat.NumberDecimalSeparator
, yang agak tidak akurat.Kode satu baris sederhana:
sumber
Jika program Anda perlu berjalan cepat, panggil value.ToString (formatString) untuk ~ 35% lebih cepat memformat kinerja string relatif ke $ "{value: formatString}" dan string.Format (formatString, nilai).
Data
Kode
Output Kode
Referensi
String Format Numerik Ubahsuaian [docs.microsoft.com]
Qt Charts Contoh BarChart [doc.qt.io]
sumber
Saya khawatir tidak ada format bawaan yang akan melakukan ini. Anda harus menggunakan format yang berbeda tergantung pada apakah nilainya bilangan bulat atau tidak. Atau selalu memformat ke 2 tempat desimal, dan memanipulasi string sesudahnya untuk menghapus "00".
sumber
Jika tidak ada jawaban lain yang bekerja untuk Anda, itu mungkin karena Anda mengikat
ContentProperty
kontrol padaOnLoad
fungsi, yang berarti ini tidak akan berfungsi:Solusinya sederhana: ada
ContentStringFormat
properti di xaml. Jadi ketika Anda membuat label, lakukan ini:Atau
sumber
sesuatu seperti ini akan bekerja juga:
sumber
Mencoba:
sumber
Untuk membuat kode lebih jelas bahwa Kahia menulis (jelas tapi menjadi rumit ketika Anda ingin menambahkan lebih banyak teks ke dalamnya) ... coba solusi sederhana ini.
Saya harus menambahkan pemeran ekstra (desimal) untuk memiliki Math.Round membandingkan dua variabel desimal.
sumber
Ini berhasil untuk saya!
sumber
Ketika berhadapan dengan desimal yang berasal dari database SQL (T-), Anda ingin dapat mengonversi desimal nullable dan non-nullable dengan x tempat desimal dan dapat meninjau kode dengan mudah terhadap definisi tabel Anda - dan tentu saja, tampilkan jumlah desimal yang tepat bagi pengguna.
Sayangnya, Entity Framework tidak secara otomatis mengonversi sesuatu seperti SQL
decimal(18,2)
menjadi .NET yang setara dengan jumlah tempat desimal yang sama (karena hanya ada desimal dengan presisi penuh yang tersedia). Anda harus memotong tempat desimal secara manual.Jadi, saya melakukannya dengan cara ini:
Contoh penggunaan:
sumber