Подтвердить что ты не робот

1/252 = 0 в С#?

Я делаю подсчет и во время отладки я нашел это:

double num = 1/252;

когда я отлаживаю это, num устанавливается в ноль (0). Для этого есть причина? Я бы хотел, чтобы это был фактический расчет.

Спасибо

4b9b3361

Ответ 1

Да - этот расчет выполняется в целочисленной арифметике. Попробуйте следующее:

double num = 1.0 / 252.0;

В принципе, тип переменной, к которой назначается результат, не влияет на выполняемую арифметическую операцию. Результатом деления одного целого на другое является целое число; если вы хотите использовать арифметику с плавающей запятой, вам нужно сделать один или другой из операндов тип с плавающей запятой. Один простой способ сделать это с помощью литералов - придерживаться ".0" в конце. Другой альтернативой является использование суффикса d:

double num = 1d / 252d;

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

Конечно, это легко сделать с литералами, но для других выражений (переменные, результаты вызовов методов и т.д.) вам нужно использовать листинг:

int x = 1;
int y = 252;
double num = (double) x / (double) y;

Опять же, вам нужно только бросить одну из них, так что это тоже сработает:

int x = 1;
int y = 252;
double num = (double) x / y;

Обратите внимание, что это не относится к делению - оно также влияет на другие арифметические операторы.

Ответ 2

1 и 252 являются целыми буквами, поэтому вычисление использует целочисленную математику. 0 - ближайший целочисленный результат. Используйте 1.0 или 252.0, чтобы получить правильное двойное значение.

Ответ 3

вы делите 2 интервала и произнесите двойную,

попробовать

double num = 1d/252d;