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