Saya ingin melakukan ini menggunakan Math.Round
fungsi
c#
decimal
rounding
bankers-rounding
Rex M
sumber
sumber
0.005
ke angka sebelum pembulatan. Demikian juga untuk membulatkan , kurangi0.005
sebelum beralih keMath.Round
fungsi.MidPointRounding.ToEven
(alias "Pembulatan Bankir") adalah karena kita semua belajar untuk bulat di sekolah di mana .5 mengumpulkan menyebabkan terlalu banyak pembulatan. Ini adalah masalah ketika berhadapan dengan uang, perhitungan pajak, dll.Coba ini:
sumber
Secara pribadi saya tidak pernah membulatkan apapun. Pertahankan agar setegas mungkin, karena pembulatan adalah sedikit herring merah di CS. Tetapi Anda ingin memformat data untuk pengguna Anda, dan untuk itu, saya menemukan itu
string.Format("{0:0.00}", number)
adalah pendekatan yang baik.sumber
Jika Anda ingin string
Atau desimal
Tapi ingat! Pembulatan tidak distributif, yaitu.
round(x*y) != round(x) * round(y)
. Jadi, jangan lakukan pembulatan hingga penghitungan, karena Anda akan kehilangan keakuratansumber
Wikipedia memiliki halaman yang bagus tentang pembulatan secara umum.
Semua bahasa .NET (terkelola) dapat menggunakan mekanisme pembulatan waktu berjalan bahasa umum (CLR). Sebagai contoh, metode Math.Round () (seperti yang disebutkan di atas) memungkinkan pengembang untuk menentukan jenis pembulatan (Round-to-even atau Away-from-zero). Metode Convert.ToInt32 () dan variasinya menggunakan round-to-even . Metode Ceiling () dan Floor () saling terkait.
Anda juga dapat membulatkannya dengan pemformatan angka khusus .
Perhatikan bahwa Decimal.Round () menggunakan metode yang berbeda dari Math.Round ();
Berikut ini adalah posisi yang berguna pada algoritma pembulatan bankir. Lihat salah satu postingan lucu Raymond di sini tentang pembulatan ...
sumber
// konversi hingga dua tempat desimal
=========
juga dapat menggabungkan "0" dengan "#".
sumber
Saya tahu ini pertanyaan lama, tetapi harap perhatikan perbedaan berikut antara putaran Math dan putaran format String :
sumber
Ini untuk pembulatan ke 2 tempat desimal di C #:
Di VB.NET:
sumber
Jika Anda ingin membulatkan angka, Anda bisa mendapatkan hasil yang berbeda tergantung pada: bagaimana Anda menggunakan fungsi Math.Round () (jika untuk pembulatan ke atas atau ke bawah), Anda bekerja dengan angka gandeng dan / atau mengapung , dan Anda menerapkan pembulatan titik tengah. Terutama, ketika menggunakan dengan operasi di dalamnya atau variabel ke putaran berasal dari operasi. Katakanlah, Anda ingin mengalikan dua angka ini: 0,75 * 0,95 = 0,7125 . Baik? Tidak dalam C #
Mari kita lihat apa yang terjadi jika Anda ingin membulatkan ke desimal ke-3:
Seperti yang Anda lihat, Putaran pertama () benar jika Anda ingin membulatkan titik tengah. Tapi Babak kedua () itu salah jika Anda ingin mengumpulkan.
Ini berlaku untuk angka negatif:
Jadi, IMHO, Anda harus membuat fungsi wrap sendiri untuk Math.Round () yang sesuai dengan kebutuhan Anda. Saya membuat fungsi di mana, parameter 'roundUp = true' berarti untuk membulatkan ke angka yang lebih besar berikutnya. Yaitu: 0,7125 putaran ke 0,713 dan -0,7125 putaran ke -0,712 (karena -0,712> -0,713). Ini adalah fungsi yang saya buat dan bekerja untuk sejumlah desimal:
'Korektor' variabel adalah untuk memperbaiki ketidaktepatan operasi dengan angka mengambang atau ganda.
sumber
Satu hal yang mungkin ingin Anda periksa adalah Mekanisme Pembulatan Matematika. Putaran:
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Selain itu, saya merekomendasikan pendekatan Math.Round (inputNumer, numberOfPlaces) lebih dari * 100/100 karena lebih bersih.
sumber
Anda harus dapat menentukan jumlah digit yang ingin Anda bulatkan dengan menggunakan Math.Round (YourNumber, 2)
Anda dapat membaca lebih lanjut di sini .
sumber
Math.Floor (123456.646 * 100) / 100 Akan mengembalikan 123456.64
sumber
string a = "10.65678";
desimal d = Math.Round (Convert.ToDouble (a.ToString ()), 2)
sumber
Punya situasi aneh di mana saya memiliki variabel desimal, ketika membuat serial 55.50 selalu menetapkan nilai default secara matematis sebagai 55.5. Tetapi sementara itu, sistem klien kami secara serius mengharapkan 55,50 untuk beberapa alasan dan mereka pasti mengharapkan desimal. Thats ketika saya telah menulis pembantu di bawah ini, yang selalu mengubah nilai desimal apa pun yang empuk menjadi 2 digit dengan nol daripada mengirim string.
Penggunaan seharusnya
Keluaran:
sumber
sumber