Это потому, что приведение к int
усекает дробную часть - оно не округляется:
8.16 * 60 = 489.6
При приведении к int
оно становится 489.
Рассмотрите возможность использования Math.round()
для своих вычислений:
int min = (int) Math.round(hours * 60);
Примечание: double
имеет ограниченную точность и страдает от проблем "маленькой ошибки остатка", но при использовании Math.round()
решит эту проблему без лишних хлопот, связанных с BigDecimal
(здесь мы не рассчитываем траектории межпланетных ракет).
FYI,чтобы преобразовать минуты в часы, используйте это:
double hours = min / 60d; // Note the "d"
Вам нужно "d" после 60
, чтобы получить 60 a double
, в противном случае это int
, и ваш результат будет int
тоже, делая hours
целое число двойным.Делая это double
, вы увеличиваете минус Java для вычисления в два раза, что вам и нужно.