Возможна потеря точности в два раза

int leccs1 = q1+q2+r1+swhw1;
System.out.println("LecCS = "+ leccs1+ "/60");
int lecprelim = lcp+lcpo;
System.out.println("LecPrelim = "+ lecprelim+ "/100");
double x = 0.50;
int lecgrade = ((x * leccs1) + (x * lecprelim));
System.out.println("LecGrade = "+ lecgrade);



C:\FINALS OBE\OBE1\ICS112_1ISB_LecFinals_OBE.java:61: error: possible loss of precision
    int lecgrade = ((x * leccs1) + (x * lecprelim));
                                 ^
  required: int
  found:    double
1 error

Process completed.

Я пытаюсь вычислить оценку. Пользователь вводит оценки в качестве ввода. я хочу x быть двойным не инт.

3 ответа

Менять

   int lecgrade = ((x * leccs1) + (x * lecprelim));

в

double lecgrade = ((x * leccs1) + (x * lecprelim));

int grade=lecgrade.intValue();

или в одну строку вы можете написать

int lecgrade = ((x * leccs1) + (x * lecprelim)).intValue();

использование intValue() конвертировать из double в int

проверьте intValue()

Если вам нужен тип lecgrade типа int, вы, возможно, захотите применить некоторое округление до приведения, например:

        double lecgrade = 1.9d;

        int result = (int) lecgrade;
        int resultRounded = (int) Math.round(lecgrade);

        System.out.println(result); // prints 1
        System.out.println(resultRounded); // prints 2

Обратите внимание, что

  1. intValue() неприменима к примитивам, вам нужно сначала указать свое значение
  2. intValue() может обрезать ваше значение вместо округления

        Double k = Double.valueOf(1.9d);
        System.out.println(k.intValue()); // prints 1 for me
    

То, что я узнал, это то, что вы хотите lecgrade как int, вы можете сделать это путем приведения типов

Попробуй это,

int lecgrade =(int) ((x * leccs1) + (x * lecprelim));
Другие вопросы по тегам