public class simpleClass{
public static void main(String[] args){
String a = "2 + 3";
double b = Double.parseDouble(a);
System.out.println(b);
}
}
那只是显示我的问题的简单代码。
为什么在我运行程序时这不起作用?
我在Spring中制作了一个简单的计算器,并且将数字作为字符串(也包括+,-,/,*)添加,但是在解析后我在IJ中遇到错误。
答案 0 :(得分:2)
您可以使用ScriptEngine评估字符串并将其解析为双精度。
赞:
public static void main(String[] args) {
// Base Query
String a = "5 * 2";
// Query Result
double b = EvalMath(a);
// Print Result
System.out.println(b);
}
// Evalute Math in String
static double EvalMath(String a) {
double result = 0;
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
try {
result = Double.parseDouble(engine.eval(a).toString());
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
希望有帮助! :D
答案 1 :(得分:0)
Double.parseDouble()无法将双精度字符转换为双精度字符,因此'+'将中断该行。
尝试:
string a1 = "2";
string a2 = "3";
double b = Double.parseDouble(a1) + Double.parseDouble(a2);
System.out.println(b);
答案 2 :(得分:0)
首先检查它:Double.parseDouble(),它使用字符串。如果不是数字,则将引发NumberFormatException。 2 + 3
是一个表达式。因此,该方法无法将其解析为两倍。
此处提供完整解决方案:
public class simpleClass {
public static void main(String[] args) {
String a = "2 + 3";
/// First of all don't add space on equation
a.replaceAll(" ", ""); // This will remove all whitespace
double op1 = 0, op2 = 0; // variable for storing value
char operand = '\0'; // operand
boolean flag = false; // false means no value taken for operation
for (int i = 0; i < a.length(); i++) {
String tmp = "";
if (Character.isDigit(a.charAt(i))) {
tmp += a.charAt(i);
if (!flag)
op1 = Double.parseDouble(tmp);
else
op2 = Double.parseDouble(tmp);
} else if (a.charAt(i) == '+' || a.charAt(i) == '-' || a.charAt(i) == '*' || a.charAt(i) == '/') {
operand = a.charAt(i);
flag = true; // now we have a value in op1
}
}
double result = 0;
if (operand == '+') {
result = op1 + op2;
} else if (operand == '-') {
result = op1 - op2;
} else if (operand == '*') {
result = op1 * op2;
} else if (operand == '/') {
result = op1 / op2;
}
System.out.println(result);
}
}
Output: 5