Ошибка с подразделением с помощью дважды вводит в Java

Хорошо. Я колотил голову против стены в течение подобных 2 часов, теперь пытаясь выяснить почему в мире double answer = 364/365; говорит мне это answer 0. Или любая другая комбинация double в этом отношении его просто усечение десятичного числа и я просто не знаю почему.

5
задан Stephen C 29 June 2019 в 02:42
поделиться

4 ответа

364/365 выполняет целочисленное деление (усекает десятичное число).

Попробуйте double answer = 364.0 / 365; , чтобы заставить его выполнять деление с плавающей запятой.

Что-то вроде:

double days_in_year = 365;
double answer = 364/days_in_year;

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

9
ответ дан 18 December 2019 в 09:49
поделиться

Причина в том, что тип целочисленных литералов по умолчанию в java - int , а все результаты арифметики на основе int возвращаются к типу int . Следовательно, хотя ваш ответ - 0,997, при повторном приведении типа он становится 0:

(int)0.997  = 0

Таким образом, вы можете сделать это так:

364.0/365.0

или

((float)364)/365
0
ответ дан 18 December 2019 в 09:49
поделиться

Вам нужно сделать двойное деление. Прямо сейчас Java интерпретирует это как целочисленное деление и возвращает усеченное int .

Вам понадобится:

double answer = 364 / 365.0;

или

double answer = 364 / (double) 365; 
2
ответ дан 18 December 2019 в 09:49
поделиться

Вы берете тип int (364) и делите на другой тип int (365) - ответом будет int. Затем он сохраняется в ответе типа double. Вы можете сделать следующее:

double answer = 364d / 365d;

Больше информации здесь:

http://mindprod.com/jgloss/division.html

6
ответ дан 18 December 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: