Bagaimana satu gips doubleuntuk decimalyang digunakan ketika melakukan pengembangan mata uang. Kemana perginya M?
decimal dtot = (decimal)(doubleTotal);
Jawaban:
Anda hanya menggunakan Muntuk literal numerik, saat Anda mentransmisikannya hanya:
decimal dtot = (decimal)doubleTotal;
Perhatikan bahwa bilangan floating point tidak cocok untuk menyimpan nilai pasti, jadi jika Anda menambahkan angka terlebih dahulu dan kemudian mengubahnya menjadi DecimalAnda mungkin mendapatkan kesalahan pembulatan. Anda mungkin ingin mengonversi angka menjadi Decimalsebelum menambahkannya bersama-sama, atau pastikan bahwa angka tersebut bukan angka floating point sejak awal.
Anda dapat mengubah dua kali lipat menjadi desimal seperti ini, tanpa memerlukan Makhiran literal:
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
Anda harus menggunakan Msaat mendeklarasikan nilai desimal literal baru:
decimal dec = 123.45M;
(Tanpa M, 123.45 diperlakukan sebagai ganda dan tidak akan dikompilasi.)
gunakan kelas konversi default: Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
doubleto decimal, mengingat doublenilai seperti (1000000.0 / 3.0) dalam beberapa kasus ingin memotong presisi "berlebih" yang menghasilkan 333333.333333333D, tetapi dalam kasus lain seseorang ingin mempertahankannya, menghasilkan 333333.333333333313931D. Daripada hanya mengatakan "ubah ke desimal", kode harus menentukan bagaimana konversi itu harus dilakukan.
Convert.ToDecimal(double)sama dengan (decimal)doubleTotal, kecuali jika doubleTotaldiubah ke jenis yang berbeda Anda mungkin akan menghindari kesalahan waktu kompilasi dan memperkenalkan kesalahan waktu proses yang lebih sulit ditemukan karena ToDecimal yang berbeda override mungkin dipanggil. Operator pemeran jauh lebih eksplisit ...
Ini adalah pertanyaan lama dan saya benar-benar memanfaatkan beberapa jawaban yang ditampilkan di sini. Namun demikian, dalam skenario khusus saya, mungkin saja doublenilai yang ingin saya ubah decimalsering lebih besar dari decimal.MaxValue. Jadi, alih-alih menangani pengecualian, saya menulis metode ekstensi ini:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
Pendekatan di atas berfungsi jika Anda tidak ingin repot menangani pengecualian luapan dan jika hal seperti itu terjadi, Anda hanya ingin mempertahankan nilai maksimal yang mungkin (kasus saya), tetapi saya sadar bahwa untuk banyak skenario lain ini bukan perilaku yang diharapkan dan mungkin penanganan pengecualian akan dibutuhkan.