У меня есть это:
double result = 60 / 23;
В моей программе результат равен 2, но правильный - 2,608695652173913. Где проблема?
У меня есть это:
double result = 60 / 23;
В моей программе результат равен 2, но правильный - 2,608695652173913. Где проблема?
Вы можете использовать любое из перечисленных ниже способов: 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 в случае реляционных или булевых выражений).
60 и 23 являются целыми литералами, поэтому вы выполняете целочисленное деление и затем присваиваете двойнику. Результатом целочисленного деления является 2.
Try
double result = 60.0 / 23.0;
Или, что то же самое,
double result = 60d / 23d;
Где суффикс d сообщает компилятору, что вы хотели написать двойной литерал.
Он будет работать
double result = (double)60 / (double) 23;
Или, что то же самое,
double result = (double)60 / 23;
(двойной) 60/23
Не использовал С# некоторое время, но вы делите два целых числа, что, насколько я помню, делает результат целым числом.
Вы можете заставить ваши литералы чисел удваиваться, добавив букву "d", это нравится:
double result = 60d / 23d;
двойной результат = 60.0/23.0;
Лучше всего правильно украшать цифры для соответствующего типа. Это позволяет избежать не только ошибки, которую вы испытываете, но и делает код более читабельным и поддерживаемым.
double x = 100d;
single x = 100f;
decimal x = 100m;
преобразуйте дивиденд и делитель в двойные значения, так что результат равен double double res = 60d/23d;
Чтобы добавить к тому, что было сказано до сих пор... 60/23 - операция с двумя константами. Компилятор распознает результат как константу и предварительно вычисляет ответ. Поскольку операция выполняется на двух целых числах, компилятор использует целочисленный результат. Целочисленная операция 60/23 имеет результат 2; поэтому эффективный компилятор создает следующий код:
double result = 2;
Как уже указывалось, вам нужно сообщить компилятору, что он не использует целые числа, меняя один или оба операнда на нецелое число, он заставит компилятор использовать константу с плавающей запятой.