Mengapa Decimal.Divide (int, int) berfungsi, tetapi tidak (int / int)?
106
Kenapa membagi dua angka int 32 bit karena (int / int) kembali kepada saya 0, tetapi jika saya menggunakan Decimal.Divide()saya mendapatkan jawaban yang benar? Aku sama sekali bukan cowok #
Bisakah Anda memberikan contoh spesifik? Desimal adalah jenis yang berbeda dari Int32.
Groo
Ngomong-ngomong, saya menemukan Desimal. Bagi hanya membutuhkan desimal sebagai masukan.
Ravi
Decimal.Divide juga berfungsi untuk integer sebagai input.
Thamarai T
Jawaban:
215
intadalah tipe integer; membagi dua int melakukan pembagian integer , yaitu bagian pecahan dipotong karena tidak dapat disimpan dalam tipe hasil (juga int!). Decimal, sebaliknya, memiliki bagian pecahan. Dengan memanggil Decimal.Divide, intargumen Anda secara implisit diubah menjadi Decimals.
Anda dapat menerapkan pembagian non-integer pada intargumen dengan secara eksplisit mentransmisikan setidaknya satu argumen ke tipe floating-point, misalnya:
Jawaban bagus. Saya juga mencoba Decimal.Divide (a, b) yang memberikan hasil yang sama.
Baxter
6
Dalam kasus pertama, Anda melakukan pembagian bilangan bulat, sehingga hasilnya terpotong (bagian desimal dipotong) dan bilangan bulat dikembalikan.
Dalam kasus kedua, int diubah menjadi desimal terlebih dahulu, dan hasilnya adalah desimal. Karenanya mereka tidak terpotong dan Anda mendapatkan hasil yang benar.
... akan dilakukan dengan menggunakan aritmatika integer . Decimal.Dividedi sisi lain mengambil dua parameter tipe Decimal, sehingga pembagian akan dilakukan pada nilai desimal daripada nilai integer. Itu setara dengan ini:
int a =1, b =2;object result =(Decimal)a /(Decimal)b;
Untuk memeriksanya, Anda dapat menambahkan baris kode berikut setelah masing-masing contoh di atas:
Saya rasa Decimal.Divide(decimal, decimal)secara implisit mengubah 2 argumen intnya menjadi desimal sebelum mengembalikan nilai desimal (tepat) dimana 4/5 diperlakukan sebagai pembagian integer dan mengembalikan 0
Jika Anda mencari 0 <a <1 jawaban, int / int tidak akan cukup. int / int melakukan pembagian integer. Cobalah mentransmisikan salah satu int menjadi ganda di dalam operasi.
Dalam sistem keuangan, sering kali merupakan persyaratan bahwa kami dapat menjamin akurasi tempat desimal dalam jumlah tertentu (basis 10). Ini umumnya tidak mungkin jika input / data sumber dalam basis 10 tetapi kami melakukan aritmatika dalam basis 2 (karena jumlah tempat desimal yang diperlukan untuk perluasan desimal suatu angka bergantung pada basis; sepertiga membutuhkan banyak desimal yang tak terhingga tempat untuk mengekspresikan dalam basis 10 sebagai 0,333333 ..., tetapi hanya membutuhkan satu desimal dalam basis-3: 0,1).
Angka floating-point lebih cepat untuk digunakan (dalam hal waktu CPU; dari segi pemrograman, angka tersebut sama-sama sederhana) dan lebih disukai kapan pun Anda ingin meminimalkan kesalahan pembulatan (seperti dalam aplikasi ilmiah).
Jawaban:
int
adalah tipe integer; membagi dua int melakukan pembagian integer , yaitu bagian pecahan dipotong karena tidak dapat disimpan dalam tipe hasil (jugaint
!).Decimal
, sebaliknya, memiliki bagian pecahan. Dengan memanggilDecimal.Divide
,int
argumen Anda secara implisit diubah menjadiDecimal
s.Anda dapat menerapkan pembagian non-integer pada
int
argumen dengan secara eksplisit mentransmisikan setidaknya satu argumen ke tipe floating-point, misalnya:sumber
Dalam kasus pertama, Anda melakukan pembagian bilangan bulat, sehingga hasilnya terpotong (bagian desimal dipotong) dan bilangan bulat dikembalikan.
Dalam kasus kedua, int diubah menjadi desimal terlebih dahulu, dan hasilnya adalah desimal. Karenanya mereka tidak terpotong dan Anda mendapatkan hasil yang benar.
sumber
Baris berikut:
... akan dilakukan dengan menggunakan aritmatika integer .
Decimal.Divide
di sisi lain mengambil dua parameter tipeDecimal
, sehingga pembagian akan dilakukan pada nilai desimal daripada nilai integer. Itu setara dengan ini:Untuk memeriksanya, Anda dapat menambahkan baris kode berikut setelah masing-masing contoh di atas:
Output dalam kasus pertama adalah
..dan dalam kasus kedua:
sumber
Saya rasa
Decimal.Divide(decimal, decimal)
secara implisit mengubah 2 argumen intnya menjadi desimal sebelum mengembalikan nilai desimal (tepat) dimana 4/5 diperlakukan sebagai pembagian integer dan mengembalikan 0sumber
Anda ingin memasukkan angka:
ganda c = (ganda) a / (ganda) b;
Catatan: Jika salah satu argumen di C # adalah ganda, pembagian ganda digunakan yang menghasilkan ganda. Jadi, berikut ini juga akan berhasil:
ganda c = (ganda) a / b;
berikut adalah Program Kecil:
sumber
Jika Anda mencari 0 <a <1 jawaban, int / int tidak akan cukup. int / int melakukan pembagian integer. Cobalah mentransmisikan salah satu int menjadi ganda di dalam operasi.
sumber
Dalam kasus saya tidak ada yang berhasil di atas.
yang ingin saya lakukan adalah membagi 278 dengan 575 dan mengalikan dengan 100 untuk menemukan persentase.
%: 48,3478260869565 -> 278/575 ---> 0%: 51,6521739130435 -> 297/575 ---> 0
jika saya mengalikan PeopleCount dengan 1.0 itu membuatnya menjadi desimal dan pembagian akan menjadi 48.34 ... juga kalikan dengan 100.0 bukan 100.
sumber
Jawaban yang ditandai seperti itu hampir selesai, tetapi saya pikir perlu ditambahkan bahwa ada perbedaan antara penggunaan ganda dan desimal.
Saya tidak akan menjelaskan konsepnya dengan lebih baik daripada Wikipedia, jadi saya hanya akan memberikan petunjuknya:
aritmatika floating-point
tipe data desimal
Dalam sistem keuangan, sering kali merupakan persyaratan bahwa kami dapat menjamin akurasi tempat desimal dalam jumlah tertentu (basis 10). Ini umumnya tidak mungkin jika input / data sumber dalam basis 10 tetapi kami melakukan aritmatika dalam basis 2 (karena jumlah tempat desimal yang diperlukan untuk perluasan desimal suatu angka bergantung pada basis; sepertiga membutuhkan banyak desimal yang tak terhingga tempat untuk mengekspresikan dalam basis 10 sebagai 0,333333 ..., tetapi hanya membutuhkan satu desimal dalam basis-3: 0,1).
Angka floating-point lebih cepat untuk digunakan (dalam hal waktu CPU; dari segi pemrograman, angka tersebut sama-sama sederhana) dan lebih disukai kapan pun Anda ingin meminimalkan kesalahan pembulatan (seperti dalam aplikasi ilmiah).
sumber