Saat menampilkan nilai desimal saat ini .ToString()
, akurat untuk menyukai 15 tempat desimal, dan karena saya menggunakannya untuk mewakili dolar dan sen, saya hanya ingin output menjadi 2 tempat desimal.
Apakah saya menggunakan variasi .ToString()
untuk ini?
Decimal
danDouble
ketikToString
metode menerima argumen untuk pemformatan. Coba konversi nilai Anda ke Desimal / Double terlebih dahulu.Saya tahu ini adalah pertanyaan lama, tetapi saya terkejut melihat bahwa tidak ada yang mengirim jawaban itu;
Inilah yang akan saya gunakan:
http://msdn.microsoft.com/en-us/library/9s0xa85y.aspx
sumber
Ini akan:
23.456
→23.46
23
→23.00
;12.5
→12.50
Ideal untuk menampilkan mata uang.
Lihatlah dokumentasi di ToString ("F") (terima kasih kepada Jon Schneider).
sumber
.
Mungkin diganti dengan,
berdasarkan budaya. Anda harus menyampaikanCultureInfo.InvariantCulture
argumen kedua untuk menonaktifkan ini.Jika Anda hanya membutuhkan ini untuk tampilan gunakan string.Format
http://www.csharp-examples.net/string-format-double/
"M" adalah sufiks desimal. Tentang sufiks desimal:
http://msdn.microsoft.com/en-us/library/364x0z75.aspx
sumber
Diberikan desimal d = 12,345; ekspresi d.ToString ("C") atau String.Format ("{0: C}", d) menghasilkan $ 12,35 - perhatikan bahwa pengaturan mata uang budaya saat ini termasuk simbol digunakan.
Perhatikan bahwa "C" menggunakan jumlah digit dari kultur saat ini. Anda selalu dapat mengesampingkan standar untuk memaksa presisi yang diperlukan dengan
C{Precision specifier}
sejenisnyaString.Format("{0:C2}", 5.123d)
.sumber
Jika Anda ingin itu diformat dengan koma serta titik desimal (tetapi tidak ada simbol mata uang), seperti 3,456.789,12 ...
sumber
Sudah ada dua jawaban skor tinggi yang merujuk ke Desimal. Putaran (...) tapi saya pikir sedikit lebih banyak penjelasan diperlukan - karena ada sifat penting tak terduga dari Desimal yang tidak jelas.
Desimal 'tahu' berapa banyak tempat desimal yang didasarkan pada dari mana asalnya.
Misalnya, hal-hal berikut mungkin tidak terduga:
Melakukan operasi yang sama dengan tidak
Double
akan memberikan tempat desimal ("25"
) untuk masing-masing di atas.Ketika Anda ingin desimal ke 2 tempat desimal, ada kemungkinan 95% karena mata uangnya dalam hal ini mungkin baik untuk 95% waktu:
Atau di XAML yang baru saja Anda gunakan
{Binding Price, StringFormat=c}
Satu kasus saya berlari ke tempat saya membutuhkan AS desimal desimal adalah ketika mengirim XML ke layanan web Amazon. Layanan ini mengeluh karena nilai Desimal (berasal dari SQL Server) dikirim sebagai
25.1200
dan ditolak, (25.12
adalah format yang diharapkan).Yang perlu saya lakukan adalah
Decimal.Round(...)
dengan 2 tempat desimal untuk memperbaiki masalah.TypedValue
adalah tipeDecimal
jadi saya tidak bisa hanya melakukanToString("N2")
dan perlu untuk memutarnya dan menyimpannya sebagaidecimal
.sumber
Berikut ini adalah program Linqpad kecil untuk menampilkan berbagai format:
Inilah hasilnya:
sumber
Math.Round Method (Desimal, Int32)
sumber
Sangat jarang Anda menginginkan string kosong jika nilainya 0.
Jawaban berperingkat teratas adalah salah dan menghabiskan 10 menit waktu (kebanyakan) orang.
sumber
"#"
berarti digit angka (jika perlu) (tanpa padding jika tidak diperlukan)"0"
berarti digit angka (tanpa mater apa pun) (diisi dengan nol jika tidak tersedia)Jawaban Mike M. sempurna bagi saya di .NET, tetapi .NET Core tidak memiliki
decimal.Round
metode pada saat penulisan.Di .NET Core, saya harus menggunakan:
Metode peretasan, termasuk konversi ke string, adalah:
sumber
Tidak ada yang melakukan apa yang saya butuhkan, untuk memaksa 2 dp dan dibulatkan menjadi
0.005 -> 0.01
Memaksa 2 dp membutuhkan peningkatan presisi sebesar 2 dp untuk memastikan kami memiliki setidaknya 2 dp
kemudian pembulatan untuk memastikan kita tidak memiliki lebih dari 2 dp
sumber
Jawaban berperingkat teratas menjelaskan metode untuk memformat representasi string dari nilai desimal, dan itu berfungsi.
Namun, jika Anda benar-benar ingin mengubah presisi yang disimpan ke nilai aktual, Anda perlu menulis sesuatu seperti berikut:
Contoh uji unit:
sumber
Anda dapat menggunakan system.globalisasi untuk memformat angka dalam format apa pun yang diperlukan.
Sebagai contoh:
Jika Anda memiliki
decimal d = 1.2300000
dan Anda perlu memotongnya ke 2 tempat desimal maka dapat dicetak seperti ini did.Tostring("F2",ci);
mana F2 adalah string yang membentuk ke 2 tempat desimal dan ci adalah locale atau cultureinfo.untuk info lebih lanjut, periksa tautan ini
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
sumber
https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx
Tautan ini menjelaskan secara terperinci bagaimana Anda dapat menangani masalah Anda dan apa yang dapat Anda lakukan jika Anda ingin mempelajari lebih lanjut. Untuk tujuan kesederhanaan, apa yang ingin Anda lakukan adalah
jika Anda menginginkan ini untuk mata uang, Anda dapat membuatnya lebih mudah dengan mengetikkan "C2" daripada "F2"
sumber
sumber
Jika Anda hanya perlu menyimpan 2 tempat desimal (mis. Potong semua angka desimal lainnya):
Jika Anda hanya perlu menyimpan 3 tempat desimal:
sumber