Як я можу розділити два цілих числа, щоб отримати подвійне?


282

Як поділити два цілих числа, щоб отримати подвійне?


10
Якщо припустити, що це було задано в інтерв'ю - ціле ділення завжди призводить до цілого числа. Ви повинні використовувати тип акторського типу, як показано нижче.
Сеш

2
Різні типи поділів: Ціле число, плаваюча точка, десяткова - обговорюється в Чому ціле ділення в c # повертає ціле число, але не поплавок?
Майкл Фрейджім

Відповіді:


460

Ви хочете передати цифри:

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

Примітка: Якщо будь-який з аргументів у C # є a double, використовується doubleрозділення, яке призводить до а double. Отже, також діятиме таке:

double num3 = (double)num1/num2;

Для отримання додаткової інформації див:

Dot Net Perls


3
Не знайте, чи це однаково в C #, але C вимагає лише віддати перший - він автоматично зробить double / int подвійним.
paxdiablo

4
@Pax. Якщо будь-який з аргументів у C або C # є подвійним, використовується подвійне ділення (в результаті чого подвійне).
страгер

32
Будьте обережні, щоб цього не робити: - double num3 = (double)(num1/num2);. Це просто дасть вам подвійне представлення результату цілого поділу!
The Lonely Coder

Припустимо, що вам не потрібна додаткова точність, чи є причина для того, щоб подати doubleзамість цього float? Я бачу, що питання вимагає, doubleале мені все одно цікаво.
Кайл Делані

@KyleDelaney Просто причина в C #, яку ми зазвичай використовуємо, doubleа не float. Коли ви пишете змінну так само var a = 1.0;, ця 1,0 завжди є a double. Я думаю, це головна причина.
this.myself

31

Доповнення відповіді @ NoahD

Для більшої точності ви можете навести десятковий:

(decimal)100/863
//0.1158748551564310544611819235

Або:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Подвійні представлені, виділяючи 64 біт, а десятковий - 128

(double)100/863
//0.11587485515643106

Поглиблене пояснення "точності"

Для отримання більш докладної інформації про точку поданні з плаваючою комою в довічним і його точності , подивіться на цій статті від Jon тарілочок , де він говорить про те, floatsі doublesта це , де він говорить про decimals.


2
Неправильно! doubleмає точність 53 біта, і це двійковий формат з плаваючою комою, тоді decimalяк це ... десятковий, звичайно, з 96 бітами точності . Тож doubleточно до ~ 15-17 десяткових цифр і десяткових 28-29 цифр (і не вдвічі більше точності double). Що ще важливіше, decimalнасправді використовується лише 102 із 128 біт
phuclv

Спасибі @phuclv, це виправили. Я мав на увазі "розподіл місця". Ви мали рацію щодо точності decimals(96), але doublesмає 52 біти
мантіси

1
так, у мантіси 52 біти, але все ще є прихований біт, в результаті якого з'являється 53-бітове значенняі. Це точність 52 чи 53 біта з плаваючою точкою?
phuclv

Десятичний.Поділіть було чудово! Thx
Рікардо G Сараїва

10

киньте цілі числа на подвійні.


Щоб бути конкретним, ви можете присвоїти ціле число до подвійного так: (подвійний) myIntegerValue
Whiplash

5

Перетворіть спочатку одну з них у подвійну. Ця форма працює багатьма мовами:

 real_result = (int_numerator + 0.0) / int_denominator

1
Простіше просто зробити ...var result = 1.0 * a / b;
Основні

@Basic Є 100 способів це зробити. Я вважаю за краще додавання лише тому, що це швидше, хоча кастинг, очевидно, все ж швидший.
Марк Викуп

1
var firstNumber=5000,
secondeNumber=37;

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

Console.WriteLine(decimalResult );

1
Питання, здається, вимагає doubleі ні decimal.
Кайл Делані
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.