我将double转换为int,但仍有错误,解释原因?

时间:2015-01-06 21:38:06

标签: java compiler-errors int double

    int x1, x2; double d;
    d = (int)(Math.sqrt(b*b - 4*a*c));
    if (d >= 0) {
        x1 = (-b + d) / 2*a;    // on this line 

"类型不匹配:无法从double转换为int"

6 个答案:

答案 0 :(得分:7)

此处x1不应该是int。您似乎正在使用它来存储二次方程的根,当然这可能不是一个整数。

x1(也可能x2)更改为double,问题就会消失。

顺便说一下,你需要2 * a左右的括号,否则你有效地将a放在分子上,而不是分母。

答案 1 :(得分:1)

d是双倍的,因此(-b + d)是双倍的。即使b不是双倍的,它也会扩展到该表达式的一个。因此,(-b + d) / 2*a是双倍的。 Java不会让你隐式地将这个双重表达式转换为int,因为你可能会失去精确度。

答案 2 :(得分:1)

您只需在要将int计算结果存储到double的位置int进行投射:

public class Test {
  public static void main(String[] args) {
    double a = 1.0;
    double b = 3.0;
    double c = 2.0;

    int x1, x2;
    double d;
    d = Math.sqrt(b * b - 4 * a * c);
    if (d >= 0) {
      x1 = (int) ((-b + d) / 2 * a); // on this line
    }
  }
}

您还应该再看看您在哪里进行符号测试d >= 0。它会起作用,因为Math.sqrt调用的结果是非负数或NaN,但在调用之前测试平方根操作数会更清楚。

答案 3 :(得分:0)

您的错误来自:

x1 = (-b + d) / 2*a;

您的变量仍然定义为double。当你将它添加到-b时,它将返回一个double。 尝试将此行另存为新的int变量而不是d:

 Int temp = (int)(Math.sqrt(b*b - 4*a*c));

答案 4 :(得分:0)

d仍然是双倍的,因为它被声明为双精度数。仅强制转换会更改值的类型;它不会将d本身更改为int。如果您希望d成为int,请将其声明为int,如下所示:

int d;

而不是

double d;

并保持其余代码相同。这应该可以解决问题。

答案 5 :(得分:0)

如果您最终以int结尾,则可以执行以下操作:

double answer = (-b + d) / 2*a;
x1 = new Double(answer).intValue();

否则,其他答案已经充分告诉你为什么你遇到了投射问题。

How to convert Double to int directly?