双和'^'运算符,不可能?

时间:2014-03-02 08:49:06

标签: java android operators double

我是新来的(准确地说是5天)在Android和Java中制作基本程序。这是我正在处理的代码,如果在此代码中的'sendAmount()部分,我会停留在'else。

我收到一个错误,上面写着“操作符^未定义参数类型为double,double ”。

现在我的问题是,如何让它工作并显示结果?

private EditText entPrinAmt;
private EditText entIntRate;
private EditText entTol;
private EditText entMonAmt;

private TextView txtFactor;
private TextView txtFutValue;
private TextView txtIntIncome;
private TextView txtEffRate;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    entPrinAmt = (EditText) findViewById(R.id.ent_prin_amt);
    entIntRate = (EditText) findViewById(R.id.ent_int_rate);
    entTol = (EditText) findViewById(R.id.ent_tol);
    entMonAmt = (EditText) findViewById(R.id.ent_mon_amt);

    txtFactor = (TextView) findViewById(R.id.txtFactor);
    txtFutValue = (TextView) findViewById(R.id.txtFutureVal);
    txtIntIncome = (TextView) findViewById(R.id.txtIntIncome);
    txtEffRate = (TextView) findViewById(R.id.txtEffRate);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void sendAmount(View view) {

    DecimalFormat df = new DecimalFormat("#,###,###,###,###,###.##");
    DecimalFormat factorFormat = new DecimalFormat("#,###.#####################");

    double dPA = Double.parseDouble(entPrinAmt.getText().toString());
    double dIR = Double.parseDouble(entIntRate.getText().toString());
    double dTL = Double.parseDouble(entTol.getText().toString());
    double dMA = Double.parseDouble(entMonAmt.getText().toString());

    if (dPA < 0){
        Context context = getApplicationContext();
        CharSequence txtToast = "Must not be negative!";
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, txtToast, duration);
        toast.show();
    }
    else if (dPA == 0 && dIR>0 && dTL>0 && dMA>0){
        Double resultPA;
        resultPA = ((dMA * ((1+dIR/12)^dTL-1)/((1+dIR/12)^dTL*dIR/12)),2);

        /*String f = df.format(resultPA);  <-v-DO NOT MIND THIS
        txtFactor.setText("Principal Amount: P" + f);*/
    }
    else {
        Context context = getApplicationContext();
        CharSequence txtToast = "Can't Compute Principal Amount!";
        int duration = Toast.LENGTH_SHORT;

        Toast toast = Toast.makeText(context, txtToast, duration);
        toast.show();
    }
}
顺便说一下,我从这里得到了这个等式:

  

返回ROUNDOFF((nPmt *((1 + nRate / 12)^ nPer-1)/((1 + nRate / 12)^ nPer * nRate / 12)),2)

我认为这是来自C或C ++平台。我不明白',2 '部分。我怎样才能将它应用到我正在研究的课程中?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:6)

^运算符是按位xor,而不是幂。事实上,Java没有定义功率运算符。您应该使用Math.pow代替。

此外,在使用货币时,您应该使用BigDecimal,原因有很多,您可以在此处找到解释。

答案 1 :(得分:1)

是的,在java 操作符^(按位xor)未定义参数类型double,double 。 使用Math.pow(double , double)代替^

所以你的代码看起来像这样:

resultPA = ((dMA * (Math.pow((1+dIR/12),dTL-1))/(Math.pow((1+dIR/12),dTL)*dIR/12)),2);

答案 2 :(得分:0)

^是一个按位XOR操作,很可能你想

double d = Math.pow(a, b); // a^^b 

答案 3 :(得分:0)

使用 pow 功能。

double output = Math.pow(x,y);