Bagaimana saya bisa membagi dua bilangan bulat untuk mendapatkan ganda?


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


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.


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.


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

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 );

1
Pertanyaannya sepertinya menyerukan doubledan tidak decimal.
Kyle Delaney
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.