【问题标题】:String to double ("a + b") [duplicate]字符串加倍(“a + b”)[重复]
【发布时间】:2018-10-19 22:40:37
【问题描述】:
public class simpleClass{
    public static void main(String[] args){
        String a = "2 + 3";
        double b = Double.parseDouble(a);
        System.out.println(b);
    }
}

这只是显示我的问题的简单代码。

为什么在我运行程序时这不起作用?

我正在 Spring 中制作一个简单的计算器,并将数字添加为字符串(也是 +、-、/、*),但在解析后我在 IJ 中遇到错误。

【问题讨论】:

  • 为什么您希望字符串"2 + 3" 可以解析为双精度数?您的代码中的“计算器”部分在哪里?

标签: java spring


【解决方案1】:

您可以使用 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

【讨论】:

    【解决方案2】:

    Double.parseDouble() 无法将双精度字符转换为双精度字符,因此 ' + ' 将打破该行。

    试试:

    string a1 = "2";
    string a2 = "3";
    double b = Double.parseDouble(a1) + Double.parseDouble(a2);
    System.out.println(b);
    

    【讨论】:

    • 你试过这段代码了吗?
    • 这不会编译,而且这个想法可能也对 OP 没有帮助,因为他们似乎正在使用作为字符串获得的数学表达式。
    • 感谢@MyStackRunnethOver 修复引号,我已经习惯使用 SO 代码格式化程序
    • @dumbdumbbadatthis 差不多。 Java中的字符串以大写S开头。
    • 您不应该在未尝试代码的情况下发布代码答案。
    【解决方案3】:

    首先检查它:Double.parseDouble() 接受字符串。如果它不是一个数字,它会抛出一个 NumberFormatException。 2 + 3 是一个表达式。所以这个方法不能解析成double。

    这里有完整的解决方案:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 2016-10-08
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2010-12-21
      相关资源
      最近更新 更多