Sqrt函数调用错误

时间:2014-03-22 20:56:05

标签: java android

我正在试图计算一个方程式。我需要使用sqrt,但即使尝试了我在互联网上看到的不同方法,我总是会遇到错误。 这是我的代码:

public void calculate(View v){
            EditText number1text=(EditText)findViewById(R.id.num1text);
            EditText number2text=(EditText)findViewById(R.id.num2text);
            EditText number3text=(EditText)findViewById(R.id.num3text);
            int num1=Integer.parseInt(number1text.getText().toString());
        int num2=Integer.parseInt(number2text.getText().toString());
        int num3=Integer.parseInt(number3text.getText().toString());
            Integer del= num2*num2+4*num1*num3 ;
            Integer first=-num2-Math.sqrt(del)/2*num1 ;   -getting errors here 
            Integer second=-num2+Math.sqrt(del)/2*num1 ;  -and here
            TextView delta=(TextView)findViewById(R.id.deltatxt);
            TextView x1=(TextView)findViewById(R.id.x1txt);
            TextView x2=(TextView)findViewById(R.id.x2txt);
            delta.setText("Delta:"+del.toString());
            x1.setText("X1:"+first.toString());
            x2.setText("X2:"+second.toString());

我已导入java.math.MathContextimport java.lang.Math

3 个答案:

答案 0 :(得分:1)

除非您的数字值非常大,否则您应该使用float或double,否则您将丢失/ 2 * num1部分的小数部分

答案 1 :(得分:0)

根据我的理解,您在这些行上遇到类型不匹配:

Integer first=-num2-Math.sqrt(del)/2*num1 ;
Integer second=-num2+Math.sqrt(del)/2*num1 ;

问题是因为Math.sqrt(double a)返回double,您尝试将结果设置为Integer

为什么要将平方根分配为整数?

您可以将它们更改为双打,如下所示:

double first=-num2-Math.sqrt(del)/2*num1 ;
double second=-num2+Math.sqrt(del)/2*num1 ;

另外,在这些方面:

delta.setText("Delta:"+del.toString());
x1.setText("X1:"+first.toString());
x2.setText("X2:"+second.toString());

您不会被允许在双重类型上使用.toString()。为避免这种情况,请将其删除。在double值前面添加字符串将显示它没有错误。

delta.setText("Delta:" + del);
x1.setText("X1:" + first);
x2.setText("X2:" + second);

答案 2 :(得分:0)

确定。您将无法从Integer转换为Double,因为

-num2-Math.sqrt(del)/2*num1;

正在生成一个你试图设置为整数的double。

Integer first =

您可以执行以下两项操作之一:

  1. 手动将RHS转换为整数以删除错误:

        Integer first= (Integer) num2-Math.sqrt(del)/2*num1 ;
    
        Integer second= (Integer) num2+Math.sqrt(del)/2*num1 ;
    

    你会失去精确度 - 不推荐。

  2. 将第一个和第二个更改为Double类型。

        Double first= num2-Math.sqrt(del)/2*num1 ;
    
        Double second= num2+Math.sqrt(del)/2*num1 ;
    
  3. 始终确保在进行分区或sqrt时,浮点值可以使用double / float或手动转换。