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