Как я могу разделить два целых числа, чтобы получить двойное?

Как мне разделить два целых числа, чтобы получить двойное?


person leora    schedule 19.03.2009    source источник
comment
Если предположить, что об этом спрашивали в интервью - целочисленное деление всегда дает целое число. Вы должны использовать приведение типа, подобное показанному ниже.   -  person Sesh    schedule 19.03.2009
comment
Различные типы деления: целочисленное, с плавающей запятой, десятичное - обсуждаются в Почему целочисленное деление в C # возвращает целое число, а не число с плавающей запятой?   -  person Michael Freidgeim    schedule 27.03.2017


Ответы (7)


Вы хотите бросить числа:

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

Примечание. Если какой-либо из аргументов в C # является double, используется разделение double, которое приводит к double. Итак, следующее тоже будет работать:

double num3 = (double)num1/num2;

Для получения дополнительной информации см .:

Dot Net Perls

person NoahD    schedule 19.03.2009
comment
Не знаю, так ли это в C #, но C требует, чтобы вы произвели приведение только первого - он автоматически сделает double / int двойным. - person paxdiablo; 19.03.2009
comment
@Pax, если какой-либо из аргументов в C или C # является двойным, используется двойное деление (в результате получается двойное). - person strager; 19.03.2009
comment
Будьте осторожны, не делайте этого: - double num3 = (double)(num1/num2);. Это просто даст вам двойное представление результата целочисленного деления! - person The Lonely Coder; 09.10.2014
comment
Предположим, вам не нужна дополнительная точность, есть ли причина использовать double вместо float? Я вижу, что вопрос требует double, но мне все равно любопытно. - person Kyle Delaney; 17.05.2017
comment
@KyleDelaney Просто потому, что в C # мы обычно используем double, а не float. Когда вы пишете переменную как var a = 1.0;, эта 1.0 всегда будет double. Думаю, это основная причина. - person this.myself; 27.02.2018
comment
Да, в VB 1/2 это 1. (FML правильно?) Cdec (1) / Cdec (2) = 0.5 - person Rob; 04.03.2021

Дополняя ответ @NoahD

Для большей точности вы можете использовать десятичный формат:

(decimal)100/863
//0.1158748551564310544611819235

Or:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

Двойные представлены с выделением 64 бита, а десятичные - с 128.

(double)100/863
//0.11587485515643106

Подробное объяснение «точности»

Дополнительные сведения о представлении с плавающей запятой в двоичном формате и его точности см. В этой статье от Джона Скита, где он говорит о floats и doubles, и об этом, где он говорит о decimals.

person fabriciorissetto    schedule 12.12.2014
comment
Неправильный! double имеет точность 53 бита, и это двоичный формат с плавающей запятой, тогда как decimal - это ... десятичный формат, конечно, с 96 бит точности. Таким образом, double имеет точность ~ 15-17 десятичных цифр и 28-29 десятичных цифр (и не вдвое превышает точность double). Что еще более важно, decimal на самом деле использует только 102 из 128 бит - person phuclv; 08.07.2018
comment
Спасибо @phuclv, исправил. Я имел в виду выделение места. Вы были правы насчет точности decimals (96), но doubles имеет 52 бита мантиссы, а не 53. - person fabriciorissetto; 22.09.2018
comment
да, мантисса имеет 52 бита, но есть еще скрытый бит, в результате чего получается 53-битная мантисса. Это 52 или 53 бита точности с плавающей запятой? - person phuclv; 22.09.2018
comment
Decimal.Divide было великолепно! Спасибо - person Ricardo G Saraiva; 26.10.2018

преобразуйте целые числа в двойные.

person Stephen Wrighton    schedule 19.03.2009
comment
Чтобы быть конкретным, вы можете преобразовать целое число в двойное, например: (double) myIntegerValue - person Whiplash; 29.11.2016

Сначала преобразуйте одно из них в двойное. Эта форма работает на многих языках:

 real_result = (int_numerator + 0.0) / int_denominator
person Mark Ransom    schedule 19.03.2009
comment
Проще просто сделать ... var result = 1.0 * a / b; - person Basic; 17.03.2017
comment
@Basic есть 100 способов сделать это. Я предпочитаю сложение только потому, что оно быстрее, хотя кастинг, очевидно, еще быстрее. - person Mark Ransom; 17.03.2017

Я просмотрел большинство ответов и почти уверен, что это недостижимо. Что бы вы ни пытались разделить два int на double или float, этого не произойдет. Но у вас есть множество методов для выполнения вычислений, просто преобразуйте их в float или double, прежде чем расчет будет правильным.

person MinhooDa    schedule 25.12.2020
comment
Привет и добро пожаловать в SO! Прочтите тур и Как сделать Я пишу хороший ответ? Не забудьте включить в свой ответ новую информацию (которой нет в других ответах). - person Tomer Shetah; 25.12.2020

person    schedule
comment
Вопрос, кажется, требует double, а не decimal. - person Kyle Delaney; 17.05.2017

person    schedule
comment
5 = первое число, 2 = второе число - person Frank; 17.12.2020
comment
Вы можете отредактировать свое сообщение, чтобы добавить информацию. Пожалуйста, не добавляйте это в комментарии - person Suraj Rao; 17.12.2020
comment
Это не дает ответа на вопрос. Как только у вас будет достаточная репутация, вы сможете комментировать любой пост; вместо этого предоставит ответы которые не требуют пояснений от автора вопроса. - Из отзыва - person compor; 17.12.2020