Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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/2/spring/13.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 在计算spring表达式后,无法获取小数点后的值_Java_Spring_Spring El - Fatal编程技术网

Java 在计算spring表达式后,无法获取小数点后的值

Java 在计算spring表达式后,无法获取小数点后的值,java,spring,spring-el,Java,Spring,Spring El,我正在尝试做以下事情: String value = "10/3"; ExpressionParser parser = new SpelExpressionParser(); final Expression expression = parser.parseExpression(value); System.out.println("value1: "+expression.getValue(Double.class)); System.out.println("value2: "+exp

我正在尝试做以下事情:

String value = "10/3"; 
ExpressionParser parser = new SpelExpressionParser();
final Expression expression = parser.parseExpression(value);
System.out.println("value1: "+expression.getValue(Double.class));
System.out.println("value2: "+expression.getValue());
输出:

value1: 3.0
value2: 3

我无法获取小数点后的值。上面的值可以是任何数学表达式,如
(3/4*5+10)
,因此我无法读取此字符串。

对于像您这样的简单数学表达式,您可以使用。您需要遵循三个步骤:

  • 创建
    ScriptEngineManager
    对象
  • 从管理器中获取
    ScriptEngine
    对象
  • 使用
    ScriptEngine
    eval
    方法评估脚本
  • 例如:

    import javax.script.*;
    public class EvalScript {
        public static void main(String[] args) throws Exception {
            ScriptEngineManager factory = new ScriptEngineManager();
            ScriptEngine engine = factory.getEngineByName("JavaScript");
            engine.eval("3/4*5 + 10");
        }
    }
    
    值为“10/3”时,两者都是整数,因此执行整数除法。如果要获取十进制值,其中一个值必须是十进制值,例如:

    String value = "10/3"; 
    
    完整示例:

        String value = "10/3.0";
        ExpressionParser parser = new SpelExpressionParser();
        final Expression expression = parser.parseExpression(value);
        System.out.println("value1: "+expression.getValue(Double.class));
        System.out.println("value2: "+expression.getValue());
    
    输出:


    很抱歉,我不认为需要regex标记,因为它可能像Java一样解析,
    double d=10/3
    也是
    3
    ,因为
    10/3
    被解释为整数除法?尝试
    String value=“10.0/3”
    ya这会起作用,但问题是,如果我得到(10/3),输入可能是任何格式,它是失败的。@任务这不起作用,因为它首先计算(10/3)=3,然后与1.0相乘。这项技术对上面提到的表达式(即spring表达式)有任何负面影响吗,不。对于特定于Spring的表达式,JavaScript API不会work@Shaan,如果你觉得有用,请给出我的答案
    value1: 3.3333333333333335
    value2: 3.3333333333333335