Java - преобразование часов (в два раза) в минуты (целое число) и наоборот - PullRequest
4 голосов
/ 12 августа 2011

Мне нужна правильная формула, которая будет переводить часы в минуты и наоборот.Я написал код, но он не работает, как ожидалось.Например: если у меня часы = 8,16, то минуты должны быть 490, но я получаю результат как 489.

  import java.io.*;
  class DoubleToInt {

  public static void main(String[] args) throws IOException{

  BufferedReader buff = 
  new BufferedReader(new InputStreamReader(System.in)); 
  System.out.println("Enter the double hours:");
  String d = buff.readLine();

  double hours = Double.parseDouble(d);
  int min = (int) ((double)hours * 60);

  System.out.println("Minutes:=" + min);
  }
} 

Ответы [ 2 ]

9 голосов
/ 12 августа 2011

Это потому, что приведение к 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 для вычисления в два раза, что вам и нужно.

0 голосов
/ 12 августа 2011

8,16 X 60 получается 489,6, и если вы конвертируете это значение в int, вы получите 489

int a = (int)489.6;
      System.out.println("Minutes:=" + a);
...