Задача простого деления С#
У меня есть это:
double result = 60 / 23;
В моей программе результат равен 2, но правильный - 2,608695652173913. Где проблема?
Ответы
Ответ 1
Вы можете использовать любое из перечисленных ниже способов: 2.60869565217391:
double result = 60 / 23d;
double result = 60d / 23;
double result = 60d/ 23d;
double result = 60.0 / 23.0;
Но
double result = 60 / 23; //give 2
Объяснение:
Если любое число двойное, оно даст двойной
EDIT:
Documentation
Оценка выражения выполняется в соответствии со следующими правилами:
-
Если один из типов с плавающей точкой является двойным, выражение оценивается как double (или bool в случае реляционных или булевых выражений).
-
Если в выражении нет двойного типа, он вычисляет float (или bool в случае реляционных или булевых выражений).
Ответ 2
60 и 23 являются целыми литералами, поэтому вы выполняете целочисленное деление и затем присваиваете двойнику. Результатом целочисленного деления является 2.
Try
double result = 60.0 / 23.0;
Или, что то же самое,
double result = 60d / 23d;
Где суффикс d сообщает компилятору, что вы хотели написать двойной литерал.
Ответ 3
Он будет работать
double result = (double)60 / (double) 23;
Или, что то же самое,
double result = (double)60 / 23;
Ответ 4
(двойной) 60/23
Ответ 5
Не использовал С# некоторое время, но вы делите два целых числа, что, насколько я помню, делает результат целым числом.
Вы можете заставить ваши литералы чисел удваиваться, добавив букву "d", это нравится:
double result = 60d / 23d;
Ответ 6
двойной результат = 60.0/23.0;
Ответ 7
Лучше всего правильно украшать цифры для соответствующего типа. Это позволяет избежать не только ошибки, которую вы испытываете, но и делает код более читабельным и поддерживаемым.
double x = 100d;
single x = 100f;
decimal x = 100m;
Ответ 8
преобразуйте дивиденд и делитель в двойные значения, так что результат равен double
double res = 60d/23d;
Ответ 9
Чтобы добавить к тому, что было сказано до сих пор... 60/23 - операция с двумя константами. Компилятор распознает результат как константу и предварительно вычисляет ответ. Поскольку операция выполняется на двух целых числах, компилятор использует целочисленный результат. Целочисленная операция 60/23 имеет результат 2; поэтому эффективный компилятор создает следующий код:
double result = 2;
Как уже указывалось, вам нужно сообщить компилятору, что он не использует целые числа, меняя один или оба операнда на нецелое число, он заставит компилятор использовать константу с плавающей запятой.