Округление double до int с использованием математического класса - PullRequest
0 голосов
/ 12 марта 2019

Я пытался превратить unitTotal (double) в целое число, используя метод округления, затем назначая целое число переменной mark.Я застрял в этом вопросе, и я не знаю, что я делаю неправильно.Если кто-нибудь может объяснить мне, что я делаю неправильно, это будет оценено.Спасибо

public class GradeCalculator {

  public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    double unitTotal;
    int mark;
    String grade; 

    System.out.println("Enter your unit total score");
    unitTotal = sc.nextDouble();
    Math.round(unitTotal); 

    mark = unitTotal;

Ответы [ 4 ]

1 голос
/ 12 марта 2019

Вы должны присвоить результат округления переменной:

mark = (int) Math.round(unitTotal);

Обратите внимание, что Math класс предлагает округлить double до long. При приведении к int вы потенциально теряете точность.

0 голосов
/ 12 марта 2019

В соответствии с Docs , метод Math.round возвращает long при передаче значения double и возвращает int при передаче значения float.

Изменение типаmark в long или вам нужно конвертировать long в int вручную.Имейте в виду, что он может выдать исключение, если возвращаемое значение больше Integer.MAX_VALUE.

Кроме того, вам нужно сохранить возвращаемое значение в переменной.

 Math.round(unitTotal); 

заменить на

 mark = Math.round(unitTotal); 

HTH.

0 голосов
/ 12 марта 2019

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

public int round(double value) {
    int cutDecimals = (int) value;  // This cuts the decimals entirely, rounding down
    double decimals = value - ((double) cutDecimals);  // Gives only the decimals
    if(decimals < 0.5) return cutDecimals;  // If the decimals is less than 0.5 we return the rounded down number
    else return cutDecimals + 1;  // If the decimals is over 0.5 we round up
}
0 голосов
/ 12 марта 2019

Вместо этого вы можете использовать sc.nextFloat();.Затем вы можете использовать Math.round(float a), который возвращает int, и назначить его для mark:

mark = Math.round(sc.nextFloat()); 
...