Задача простого деления С#

У меня есть это:

 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;

Как уже указывалось, вам нужно сообщить компилятору, что он не использует целые числа, меняя один или оба операнда на нецелое число, он заставит компилятор использовать константу с плавающей запятой.