Ответ 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;
Обратите внимание, что это не относится к делению - оно также влияет на другие арифметические операторы.