Предполагая, что это было задано в интервью - целочисленное деление всегда приводит к целому числу. Вы должны использовать приведение типа, как показано ниже.
Примечание. Если какой-либо из аргументов в C # является a double, используется doubleделение, которое приводит к a double. Таким образом, будет работать следующее:
Не знаю, то же самое ли это в C #, но C требует, чтобы вы разыгрывали только первое - это автоматически сделает double / int double.
paxdiablo
4
@Pax, Если какой-либо из аргументов в C или C # является двойным, используется двойное деление (что приводит к двойному).
Страгер
32
Будьте осторожны , чтобы не делать этого: - double num3 = (double)(num1/num2);. Это просто даст вам двойное представление результата целочисленного деления!
Одинокий кодер
Предположим, вам не нужна дополнительная точность, есть ли причина использовать doubleвместо float? Я вижу, что вопрос требует, doubleно мне все равно любопытно.
Кайл Делани
@KyleDelaney Просто потому, что в C # мы обычно используем doubleи нет float. Когда вы пишете переменную, как var a = 1.0;это, этот 1.0 всегда является double. Я думаю, это главная причина.
this.myself
31
Дополняя ответ @ NoahD
Для большей точности вы можете привести к десятичному типу:
Double представлены распределением 64 бита, в то время как десятичное использует 128
(double)100/863//0.11587485515643106
Углубленное объяснение «точности»
Для получения более подробной информации о точке представлении с плавающей запятой в двоичном и его точности , посмотрите на этой статье от Jon тарелочек , где он говорит о том, floatsи doublesи этом , где он говорит о decimals.
Неправильно! doubleимеет точность 53 бита, и это двоичный формат с плавающей запятой, тогда decimalкак ... десятичный, конечно, с точностью 96 бит . Так doubleчто с точностью до ~ 15-17 десятичных цифр и десятичных 28-29 цифр (и не в два раза больше точности double). Что еще более важно на decimalсамом деле использует только 102 из 128 битов
phuclv
Спасибо @phuclv, исправил это. Я имел в виду "распределение пространства". Вы были правы насчет точности decimals(96), но у вас doublesесть 52 бита мантиссы , а не 53.
Ответы:
Вы хотите бросить числа:
Примечание. Если какой-либо из аргументов в C # является a
double
, используетсяdouble
деление, которое приводит к adouble
. Таким образом, будет работать следующее:Для получения дополнительной информации см .:
Dot Net Perls
источник
double num3 = (double)(num1/num2);
. Это просто даст вам двойное представление результата целочисленного деления!double
вместоfloat
? Я вижу, что вопрос требует,double
но мне все равно любопытно.double
и нетfloat
. Когда вы пишете переменную, какvar a = 1.0;
это, этот 1.0 всегда являетсяdouble
. Я думаю, это главная причина.Дополняя ответ @ NoahD
Для большей точности вы можете привести к десятичному типу:
Или:
Double представлены распределением 64 бита, в то время как десятичное использует 128
Углубленное объяснение «точности»
Для получения более подробной информации о точке представлении с плавающей запятой в двоичном и его точности , посмотрите на этой статье от Jon тарелочек , где он говорит о том,
floats
иdoubles
и этом , где он говорит оdecimals
.источник
double
имеет точность 53 бита, и это двоичный формат с плавающей запятой, тогдаdecimal
как ... десятичный, конечно, с точностью 96 бит . Такdouble
что с точностью до ~ 15-17 десятичных цифр и десятичных 28-29 цифр (и не в два раза больше точностиdouble
). Что еще более важно наdecimal
самом деле использует только 102 из 128 битовdecimals
(96), но у васdoubles
есть 52 бита мантиссы , а не 53.приведите целые числа к двойникам.
источник
Преобразование одного из них в двойное первое. Эта форма работает на многих языках:
источник
var result = 1.0 * a / b;
источник
double
и нетdecimal
.