C # простая проблема деления - PullRequest
14 голосов
/ 12 ноября 2010

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

 double result = 60 / 23;

В моей программе результат 2, но правильный 2,608695652173913.Где проблема?

Ответы [ 9 ]

51 голосов
/ 12 ноября 2010

60 и 23 - целочисленные литералы, поэтому вы делаете целочисленное деление, а затем присваиваете значение double.Результат целочисленного деления равен 2.

Попробуйте

double result = 60.0 / 23.0;

Или эквивалентно

double result = 60d / 23d;

Где суффикс d сообщает компилятору, что вы намеревались написать двойное числобуквальный.

18 голосов
/ 12 ноября 2010

Вы можете использовать любое из следующих значений: 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

Пояснение:

если любое число двойное , то получится двойное


РЕДАКТИРОВАТЬ:

Документация

Оценка выражения выполняется по следующим правилам:

  • Если один из типов с плавающей запятойравно double, выражение оценивается как double (или bool в случае реляционных или логических выражений).

  • Если в выражении нет двойного типа, оно вычисляется как float (или bool в случае реляционных или логических выражений).

9 голосов
/ 12 ноября 2010

будет работать

double result = (double)60 / (double) 23;

или эквивалентно

double result = (double)60 /  23;
3 голосов
/ 12 ноября 2010

двойной результат = 60,0 / 23,0;

3 голосов
/ 12 ноября 2010

Некоторое время не использовал C #, но вы делите два целых числа, что, насколько я помню, делает результат также целым числом.буква "д", нравится это:

double result = 60d / 23d;
3 голосов
/ 12 ноября 2010

(двойной) 60/23

2 голосов
/ 12 ноября 2010

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

double x = 100d;
single x = 100f;
decimal x = 100m;
1 голос
/ 18 июля 2012

преобразует дивиденд и делитель в двойные значения, так что в результате получается double
double res = 60d / 23d;

0 голосов
/ 15 мая 2011

Чтобы добавить к сказанному до сих пор ... 60/23 - это операция с двумя константами.Компилятор распознает результат как константу и предварительно вычисляет ответ.Поскольку операция состоит из двух целых чисел, компилятор использует целочисленный результат. Целочисленная операция 60/23 имеет результат 2;поэтому эффективный компилятор создает следующий код:

double result = 2;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...