Apakah ada pemformat tampilan yang akan mengeluarkan desimal sebagai representasi string ini di c # tanpa melakukan pembulatan apa pun?
// decimal -> string
20 -> 20
20.00 -> 20
20.5 -> 20.5
20.5000 -> 20.5
20.125 -> 20.125
20.12500 -> 20.125
0.000 -> 0
{0. #} akan membulatkan, dan menggunakan beberapa fungsi tipe Trim tidak akan bekerja dengan kolom numerik terikat dalam kisi.
c#
formatting
decimal
JC.
sumber
sumber
"0.0#"
.Saya baru saja mempelajari cara menggunakan
G
penentu format dengan benar . Lihat Dokumentasi MSDN . Ada catatan sedikit di bawah yang menyatakan bahwa nol di belakang akan dipertahankan untuk tipe desimal jika tidak ada presisi yang ditentukan. Mengapa mereka melakukan ini saya tidak tahu, tetapi menentukan jumlah digit maksimum untuk ketepatan kami harus memperbaiki masalah itu. Jadi untuk memformat desimal,G29
adalah yang terbaik.sumber
Format string ini akan membuat hari Anda menjadi: "0. ############################". Perlu diingat bahwa desimal dapat memiliki paling banyak 29 digit signifikan.
Contoh:
sumber
Ini adalah variasi lain dari apa yang saya lihat di atas. Dalam kasus saya, saya perlu mempertahankan semua digit signifikan di sebelah kanan koma desimal, yang berarti hilangkan semua angka nol setelah digit paling signifikan. Hanya berpikir akan menyenangkan untuk berbagi. Saya tidak dapat menjamin efisiensi ini, tetapi ketika mencoba mencapai estetika, Anda sudah terkutuk dengan inefisiensi.
Itu saja, hanya ingin memberikan dua sen saya.
sumber
strValue.TrimEnd('0').TrimEnd('.')
bukanEndsWith
cek?Solusi lain, berdasarkan jawaban dyslexicanaboko , tetapi tidak bergantung pada budaya saat ini:
sumber
Metode ekstensi:
Kode contoh:
Keluaran:
sumber
IndexOf
untuk menemukan karakter dalam sebuah string. Cukup mudah untuk menyesuaikan contoh untuk menyelesaikan soal tanpa desimal.Saya tidak berpikir itu mungkin out-of-the-box tetapi metode sederhana seperti ini harus melakukannya
sumber
Ini cukup mudah dilakukan di luar kotak:
yang akan menghapus semua nol di belakang Desimal Anda.
Satu-satunya hal yang perlu Anda lakukan adalah menambahkan
.ToString().TrimEnd('0','.');
variabel desimal untuk mengubah aDecimal
menjadi aString
tanpa membuntuti nol, seperti pada contoh di atas.Di beberapa wilayah, ini harus berupa
.ToString().TrimEnd('0',',');
(di mana mereka menggunakan koma, bukan titik, tetapi Anda juga dapat menambahkan titik dan koma sebagai parameter untuk memastikan).(Anda juga dapat menambahkan keduanya sebagai parameter)
sumber
params
argumen, Anda tidak harus membuat array secara eksplisit. Jadi alih-alih verboseTrimEnd("0".ToCharArray())
Anda bisa menulisTrimEnd('0')
(catatan: lulus tunggalchar
bukan achar[]
).char
, bukan astring
(jadi: tanda kutip tunggal, bukan tanda kutip ganda). Saya memperbaikinya untuk Anda - semoga Anda tidak keberatan.sumber
Saya berakhir dengan kode berikut:
sumber
Saya telah berakhir dengan varian ini:
Keuntungan:
Anda dapat menentukan jumlah maksimal digit signifikan setelah titik yang akan ditampilkan saat runtime;
Anda dapat secara eksplisit menentukan metode bulat;
Anda dapat mengontrol budaya secara eksplisit.
sumber
Anda dapat membuat metode ekstensi
sumber
Saya membuat metode ekstensi di bawah ini untuk diri saya sendiri agar sesuai dengan salah satu proyek saya, tetapi mungkin itu akan bermanfaat bagi orang lain.
Padahal itu akan membutuhkan referensi
System.Numerics
.sumber