Saya memiliki beberapa bidang dikembalikan oleh koleksi sebagai
2.4200
2.0044
2.0000
Saya ingin hasil seperti
2.42
2.0044
2
Saya mencoba String.Format
, tetapi mengembalikan 2.0000
dan mengaturnya untuk N0
membulatkan nilai-nilai lain juga.
String.Format()
dengan 'G' harus mendapatkan yang Anda inginkan .. saya sudah memperbarui jawaban saya dengan tautan ke format angka standar. Sangat userful.double
, dan defaultToString
untuk double memancarkan nol trailing. baca iniToString
fungsi.Jawaban:
Apakah tidak sesederhana ini, jika inputnya berupa string? Anda dapat menggunakan salah satu dari ini:
Ini harus bekerja untuk semua input.
Perbarui Lihat Format Numerik Standar yang saya miliki untuk secara eksplisit mengatur specifier presisi ke 29 sebagai dokumen jelas menyatakan:
Pembaruan Konrad ditunjukkan dalam komentar:
sumber
Saya mengalami masalah yang sama tetapi dalam kasus di mana saya tidak memiliki kontrol output ke string, yang dirawat oleh perpustakaan. Setelah melihat detail penerapan tipe Desimal (lihat http://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx ), saya menemukan trik yang rapi (di sini sebagai ekstensi metode):
Bagian eksponen desimal dikurangi menjadi apa yang dibutuhkan. Memanggil ToString () pada desimal output akan menulis nomor tanpa tertinggal 0. Misalnya
sumber
1
diikuti oleh 33-an0
, tetapi itu menciptakandecimal
contoh yang sama persis dengan angka dengan 29 angka, satu1
dan 280
-s. Sama seperti @ThomasMaterna katakan dalam komentarnya. TidakSystem.Decimal
dapat memiliki lebih dari 29 angka (angka dengan digit terdepan lebih besar dari yang79228...
bisa dimiliki hanya 28 angka). Jika Anda ingin lebih banyak membuntuti nol, gandakan dengan1.000...m
alih-alih membaginya. Juga,Math.Round
dapat memotong beberapa nol, misalnyaMath.Round(27.40000m, 2)
memberi27.40m
, jadi hanya satu nol yang tersisa.Menurut pendapat saya lebih aman menggunakan Custom Numeric Format String .
sumber
Saya menggunakan kode ini untuk menghindari notasi ilmiah "G29":
EDIT: using system CultureInfo.NumberFormat.NumberDecimalSeparator:
sumber
Culture.NumberFormat.NumberDecimalSeparator
Gunakan
#
simbol hash ( ) untuk hanya menampilkan trailing 0 bila perlu. Lihat tes di bawah ini.sumber
num1.ToString("0.##")
harus mengembalikan13.1534545765
(tidak ada perubahan) karena tidak ada nol tambahan.Saya menemukan solusi elegan dari http://dobrzanski.net/2009/05/14/c-decimaltostring-and-how-to-get-rid-of-trailing-zeros/
Pada dasarnya
sumber
v
adalah0m
, hasil dari kode Anda adalah string kosong bukan"0"
.Pendekatan level yang sangat rendah, tapi saya yakin ini akan menjadi cara yang paling performan dengan hanya menggunakan perhitungan integer cepat (dan tidak ada metode penguraian string lambat dan kultur sensitif):
sumber
a
danb
) di setiap iterasi sementara jika mereka semua nol pula. Namun kemudian saya menemukan solusi sederhana yang mengejutkan ini yang juga dengan mudah mengalahkan apa yang Anda dan saya hasilkan dengan bijaksana .Ini akan berhasil:
Atau jika nilai awal Anda adalah
string
:Perhatikan komentar ini .
sumber
double.ToString
karena secara default menghapus nol jejak.Ini sederhana.
Diuji.
Bersulang :)
sumber
Bergantung pada apa yang angka Anda wakili dan bagaimana Anda ingin mengelola nilai: apakah ini mata uang, apakah Anda perlu pembulatan atau pemotongan, apakah Anda perlu pembulatan ini hanya untuk tampilan?
Jika untuk tampilan pertimbangkan memformat angka-angka tersebut x.ToString ("")
http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx dan
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx
Jika hanya pembulatan, gunakan kelebihan beban Math.Round yang membutuhkan kelebihan MidPointRounding
http://msdn.microsoft.com/en-us/library/ms131274.aspx )
Jika Anda mendapatkan nilai dari basis data, pertimbangkan untuk menggunakan casting alih-alih konversi: double value = (desimal) myRecord ["columnName"];
sumber
Anda bisa menetapkan sebagai:
sumber
Jika Anda ingin menyimpan angka desimal, coba contoh berikut:
sumber
Mencoba melakukan solusi DecimalToString yang lebih ramah ( https://stackoverflow.com/a/34486763/3852139 ):
Keluaran:
sumber
Jawaban yang sangat sederhana adalah dengan menggunakan TrimEnd (). Inilah hasilnya,
Output adalah 1 Jika nilai saya adalah 1,01 maka output saya akan menjadi 1,01
sumber
value = 100
?Kode berikut dapat digunakan untuk tidak menggunakan tipe string:
Pengembalian 789.5
sumber
Truncate trailing Zero sangat mudah, atasi dengan duplex cast:
(I) -> Parse nilai desimal dari sembarang sumber string.
(II) -> Pertama: Cast untuk menggandakan ini menghapus nol trailing. Kedua: Lainnya dilemparkan ke desimal karena tidak ada konversi implisit dari desimal ke ganda dan sebaliknya
sumber
coba kode ini:
sumber
coba seperti ini
dan kemudian mengubahnya menjadi mengambang
sumber
subString()
metode untuk itu, tetapi menurut pertanyaan yang diposting di sini, saya tidak melihat persyaratan seperti itu =)"12300.00"
akan dipangkas"123"
. Efek lain yang tampaknya tidak diinginkan adalah bahwa beberapa angka, seperti"0.00"
dipangkas habis hingga string kosong""
(meskipun angka ini adalah kasus khusus sebagai integral "kelipatan 10,0").