Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每当我用输入的任何东西计算平方或平方根时,NAN?_Java_Android - Fatal编程技术网

Java 每当我用输入的任何东西计算平方或平方根时,NAN?

Java 每当我用输入的任何东西计算平方或平方根时,NAN?,java,android,Java,Android,以下是我对这两个函数的代码: else if(btn.getText().equals("sqr")) { BigDecimal LeftVal = new BigDecimal(currentInput); BigDecimal result = null; if(currentInputLen > 0 && currentInput !="0") { result = Lef

以下是我对这两个函数的代码:

else if(btn.getText().equals("sqr"))
    {
        BigDecimal LeftVal = new BigDecimal(currentInput);
        BigDecimal result = null;
        if(currentInputLen > 0 && currentInput !="0")
        {
            result = LeftVal.pow(2);        
        }
        inputText.setText(result+"");
    }
    else if(btn.getText().equals("sqrt"))
    {
        double LeftVal = Double.parseDouble(currentInput);
        double result = 0;
        if(currentInputLen > 0 && currentInput !="0")
        {
            result = Math.sqrt(LeftVal);        
        }
        inputText.setText(result+"");
    }
我弄不清是什么错了。下面是currentInputLen和currentInput的声明

String currentInput = inputText.getText().toString();
    int currentInputLen = currentInput.length();
它们似乎没有什么问题,因为我可以计算sin,cos,等等。只是平方根和平方根引起了问题。下面是sin代码,它工作得非常好

else if(btn.getText().equals("sin"))
    {
        double LeftVal = Double.parseDouble(currentInput);
        double result = 0;
        LeftVal *=Math.PI;
        LeftVal/=180;
        if(currentInputLen > 0 && currentInput !="0")
        {
            result = Math.sin(LeftVal);         
        }
        inputText.setText(result+"");
    }
当我输入90时,它输出1.0

它现在可以使用此代码

else if(btn.getText().equals("+")||btn.getText().equals("-")||btn.getText().equals("/")||btn.getText().equals("x")||btn.getText().equals("pow")||btn.getText().equals("sqr"))
    {
        if (resetInput) {
            mInputStack.pop();
            mOperationStack.pop();
        } else {
            if (currentInput.charAt(0)=='-') {
                mInputStack.add("(" + currentInput + ")");
            } else {
                mInputStack.add(currentInput);
            }
            mOperationStack.add(currentInput);
        }

        mInputStack.add(text);
        mOperationStack.add(text);

        dumpInputStack();
        evalResult = evaluateResult(false);
        if (evalResult != null)
            inputText.setText(evalResult);

        resetInput = true;
    }
然后,在几行代码之后,有以下几行代码:

private String evaluateResult(boolean requestedByUser) {
    if ((!requestedByUser && mOperationStack.size() != 4)
            || (requestedByUser && mOperationStack.size() != 3))
        return null;

    String left = mOperationStack.get(0);
    String operator = mOperationStack.get(1);
    String right = mOperationStack.get(2);
    String tmp = null;
    if (!requestedByUser)
        tmp = mOperationStack.get(3);

    BigDecimal leftVal = new BigDecimal(left);
    BigDecimal rightVal = new BigDecimal(right);
    BigDecimal result = null;

else if (operator.equals("sqr"))
    {
        result = leftVal.pow(2);
    }
输出如图所示

您正在通过引用比较字符串
=执行以下操作时:

if(currentInputLen > 0 && currentInput !="0")
使用
equals()。我们也要这样做:


相反。

您确定LeftVal为阳性吗?具体症状是什么?务必显示您的工作条款之一,例如sin()。您的代码
result+“”
看起来应该是
“”+result
或者干脆是
result.toString()
。在java中,字符串+另一个值自动将第二个值转换为字符串。是的,我确信LeffToT值是肯定的。考虑添加参数和程序流的日志记录,或者在java下运行。debugger@Reimeus有一个很好的观点,但正好相反:您需要使用
currentInput.equals(“0”)
如果要测试字符串相等性而不是标识。文本字段的字符串将与文本字符串不同。我仍在获取NaN
if(currentInputLen > 0 && !currentInput.equals("0"))