Dengan asumsi ini diminta dalam wawancara - divisi integer selalu menghasilkan integer. Anda harus menggunakan tipe pemeran seperti yang ditunjukkan di bawah ini.
Catatan: Jika salah satu argumen dalam C # adalah a double, sebuah doublepembagian digunakan yang menghasilkan a double. Jadi, berikut ini akan berfungsi juga:
Tidak tahu apakah ini sama dalam C #, tetapi C hanya mengharuskan Anda untuk melakukan cast pertama - itu akan secara otomatis membuat double / int menjadi double.
paxdiablo
4
@ Max, Jika salah satu argumen dalam C atau C # adalah dobel, digunakan pembagian dobel (menghasilkan dobel).
strager
32
Berhati-hatilah untuk tidak melakukan ini: - double num3 = (double)(num1/num2);. Ini hanya akan memberi Anda representasi ganda dari hasil pembagian integer!
The Lonely Coder
Andaikata Anda tidak membutuhkan ketelitian ekstra, adakah alasan untuk melakukan doublealih-alih float? Saya dapat melihat pertanyaannya doubletetapi saya tetap ingin tahu.
Kyle Delaney
@KyleDelaney Hanya karena dalam C # kita biasanya menggunakan doubledan tidak float. Ketika Anda menulis variabel seperti var a = 1.0;, 1.0 ini selalu a double. Saya kira inilah alasan utamanya.
ini.myself
31
Melengkapi jawaban @ NoahD
Untuk memiliki presisi yang lebih besar, Anda dapat menggunakan desimal:
Dobel diwakili mengalokasikan 64 bit sementara desimal menggunakan 128
(double)100/863//0.11587485515643106
Penjelasan mendalam tentang "presisi"
Untuk rincian lebih lanjut tentang representasi floating point di biner dan presisi lihat artikel ini dari Jon Skeet mana ia berbicara tentang floatsdan doublesdan ini salah satu di mana ia berbicara tentang decimals.
Salah! doublememiliki ketepatan 53 bit, dan ini adalah format titik-mengambang biner , sedangkan decimaladalah ... desimal, tentu saja, dengan 96 bit presisi . Jadi doubletepat untuk ~ 15-17 digit desimal dan desimal 28-29 digit (dan tidak dua kali presisi double). Lebih penting lagi decimalsebenarnya hanya menggunakan 102 dari 128 bit
phuclv
Terima kasih @ phuclv, perbaiki itu. Maksud saya "alokasi ruang". Anda benar tentang ketepatan decimals(96), tetapi doublesmemiliki 52 bit mantissa , bukan 53.
Jawaban:
Anda ingin memberikan nomor:
Catatan: Jika salah satu argumen dalam C # adalah a
double
, sebuahdouble
pembagian digunakan yang menghasilkan adouble
. Jadi, berikut ini akan berfungsi juga:Untuk informasi lebih lanjut, lihat:
Dot Net Perls
sumber
double num3 = (double)(num1/num2);
. Ini hanya akan memberi Anda representasi ganda dari hasil pembagian integer!double
alih-alihfloat
? Saya dapat melihat pertanyaannyadouble
tetapi saya tetap ingin tahu.double
dan tidakfloat
. Ketika Anda menulis variabel sepertivar a = 1.0;
, 1.0 ini selalu adouble
. Saya kira inilah alasan utamanya.Melengkapi jawaban @ NoahD
Untuk memiliki presisi yang lebih besar, Anda dapat menggunakan desimal:
Atau:
Dobel diwakili mengalokasikan 64 bit sementara desimal menggunakan 128
Penjelasan mendalam tentang "presisi"
Untuk rincian lebih lanjut tentang representasi floating point di biner dan presisi lihat artikel ini dari Jon Skeet mana ia berbicara tentang
floats
dandoubles
dan ini salah satu di mana ia berbicara tentangdecimals
.sumber
double
memiliki ketepatan 53 bit, dan ini adalah format titik-mengambang biner , sedangkandecimal
adalah ... desimal, tentu saja, dengan 96 bit presisi . Jadidouble
tepat untuk ~ 15-17 digit desimal dan desimal 28-29 digit (dan tidak dua kali presisidouble
). Lebih penting lagidecimal
sebenarnya hanya menggunakan 102 dari 128 bitdecimals
(96), tetapidoubles
memiliki 52 bit mantissa , bukan 53.cor bilangan bulat menjadi dua kali lipat.
sumber
Konversikan salah satunya menjadi dobel terlebih dahulu. Formulir ini berfungsi dalam banyak bahasa:
sumber
var result = 1.0 * a / b;
sumber
double
dan tidakdecimal
.