可能损失精度加倍

时间:2014-03-15 09:11:56

标签: java double-precision

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加倍而不是int。

3 个答案:

答案 0 :(得分:4)

变化

   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()

答案 1 :(得分:1)

我所知道的是你希望lecgrade作为一个int你可以通过类型转换

来做到这一点

试试这个,

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

答案 2 :(得分:1)

如果你需要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