Bagaimana saya bisa membagi dua bilangan bulat untuk mendapatkan ganda?

282

Bagaimana cara membagi dua bilangan bulat untuk mendapatkan ganda?

leora
sumber
10
Dengan asumsi ini diminta dalam wawancara - divisi integer selalu menghasilkan integer. Anda harus menggunakan tipe pemeran seperti yang ditunjukkan di bawah ini.
Sesh
2
Berbagai jenis divisi: Integer, Floating-point, Desimal -diskusi dalam Mengapa pembagian integer di c # mengembalikan integer tetapi bukan float?
Michael Freidgeim

Jawaban:

460

Anda ingin memberikan nomor:

double num3 = (double)num1/(double)num2;

Catatan: Jika salah satu argumen dalam C # adalah a double, sebuah doublepembagian digunakan yang menghasilkan a double. Jadi, berikut ini akan berfungsi juga:

double num3 = (double)num1/num2;

Untuk informasi lebih lanjut, lihat:

Dot Net Perls

Nuh
sumber
3
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:

(decimal)100/863
//0.1158748551564310544611819235

Atau:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

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.

fabriciorissetto
sumber
2
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.
fabriciorissetto
1
ya, mantissa memiliki 52 bit, tetapi masih ada bit yang tersembunyi, menghasilkan 53-bit yang signifikan. Apakah presisi floating point 52 atau 53 bit?
phuclv
Desimal. Membagi itu luar biasa! Thx
Ricardo G Saraiva
10

cor bilangan bulat menjadi dua kali lipat.

Stephen Wrighton
sumber
Untuk lebih spesifik, Anda dapat melemparkan integer ke ganda seperti: (double) myIntegerValue
Whiplash
5

Konversikan salah satunya menjadi dobel terlebih dahulu. Formulir ini berfungsi dalam banyak bahasa:

 real_result = (int_numerator + 0.0) / int_denominator
Mark tebusan
sumber
1
Lebih mudah dilakukan ...var result = 1.0 * a / b;
Basic
@ Dasar ada 100 cara untuk melakukannya. Saya lebih suka penambahan hanya karena lebih cepat, meskipun casting jelas masih lebih cepat.
Mark Ransom
1
var firstNumber=5000,
secondeNumber=37;

var decimalResult = decimal.Divide(firstNumber,secondeNumber);

Console.WriteLine(decimalResult );
Rejwanul Reja
sumber
1
Pertanyaannya sepertinya menyerukan doubledan tidak decimal.
Kyle Delaney