Вопрос о математических операциях Java с типами данных float
и int
.
Мне нужно рассчитать разницу дат в годах между двумя датами.
Код:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Object date = obj.getInfoItem().getInfoValue();
Date today = new Date();
Date birthDate = null;
float dateDiff;
int age0, age1;
try {
// unify the date format
birthDate = format.parse(date.toString());
today = format.parse(format.format(today));
} catch (ParseException e) {
e.printStackTrace();
}
// calculate the age in years with round
dateDiff = today.getTime() - birthDate.getTime();
age0 = (int)((dateDiff / (24 * 60 * 60 * 1000)) / 365);
age1 = (int)(dateDiff / (365 * 24 * 60 * 60 * 1000));
Поскольку разница дат в Java рассчитывается в миллисекундах, поэтому после расчета нам нужно выполнить некоторую хозяйственную работу и преобразовать полученный результат из миллисекунд в годы.
После выполнения кода я получил следующие результаты в отладчике:
dateDiff = 8.4896639E11
age0 = 26
age1 = 577
age0
- правильный результат.
Поскольку обе операции над age0
и age1
математически равны, почему результаты различны? Почему есть разница между операциями «(float / (a\*b\*c)) / d
» и «(float / (a\*b\*c\*d))
», где a
, b
, c
, d
это int
.
365f * 24f * 60f * 60f * 1000f
. - person Chill   schedule 09.06.2014