我正在尝试做以下事情:
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)
,所以我无法读取此字符串。
答案 0 :(得分:0)
对于像您这样的简单材料表达式,您可以使用Java Scripting API而不是使用SpEL ExpressionParser
。您需要遵循三个步骤:
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");
}
}
答案 1 :(得分:0)
值均为“ 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());
输出:
value1: 3.3333333333333335 value2: 3.3333333333333335