2010-02-16 2 views
5

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

ответ

8

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

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

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

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

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

+0

Эй спасибо. Это было действительно просто, но теперь я знаю! – Jeff

+0

Счастливые помочь. :) – Sapph

2

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

Что вам нужно:

double answer = 364/365.0; 

или

double answer = 364/(double) 365; 
5

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

double answer = 364d/365d; 

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

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

+3

+1 для использования суффикса d, который намного приятнее (IMHO), чем добавление .0 в конец или использование явного приведения, как показывают все остальные ответы. – Cowan

0

Причина заключается в том, что по умолчанию тип целочисленных литералов в Java является int и все это результат всего на основе arithemetic int является тип отбрасывается до int. Следовательно, если ваш ответ 0,997, когда он typecasted обратно становится 0:

(int)0.997 = 0 

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

364.0/365.0 

или

((float)364)/365