Хорошо. Я колотил голову против стены в течение подобных 2 часов, теперь пытаясь выяснить почему в мире double answer = 364/365;
говорит мне это answer
0. Или любая другая комбинация double
в этом отношении его просто усечение десятичного числа и я просто не знаю почему.
364/365 выполняет целочисленное деление (усекает десятичное число).
Попробуйте double answer = 364.0 / 365;
, чтобы заставить его выполнять деление с плавающей запятой.
Что-то вроде:
double days_in_year = 365;
double answer = 364/days_in_year;
также будет работать, поскольку один из операндов не является целым числом.
Причина в том, что тип целочисленных литералов по умолчанию в java - int
, а все результаты арифметики на основе int
возвращаются к типу int
. Следовательно, хотя ваш ответ - 0,997, при повторном приведении типа он становится 0:
(int)0.997 = 0
Таким образом, вы можете сделать это так:
364.0/365.0
или
((float)364)/365
Вам нужно сделать двойное деление. Прямо сейчас Java интерпретирует это как целочисленное деление и возвращает усеченное int
.
Вам понадобится:
double answer = 364 / 365.0;
или
double answer = 364 / (double) 365;
Вы берете тип int (364) и делите на другой тип int (365) - ответом будет int. Затем он сохраняется в ответе типа double. Вы можете сделать следующее:
double answer = 364d / 365d;
Больше информации здесь: