public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
Expression exp0 = parser.parseExpression("152431 * 0.0045");
Expression exp1 = parser.parseExpression("152431* 0.045");
Expression exp2 = parser.parseExpression("152431* 0.45");
Expression exp3 = parser.parseExpression("152431 * 4.5");
Expression exp4 = parser.parseExpression("152431 * 45");
System.out.println(exp0.getValue());
System.out.println(exp1.getValue());
System.out.println(exp2.getValue());
System.out.println(exp3.getValue());
System.out.println(exp4.getValue());
System.out.println("相当于doublexdouble" + 152431D * 0.045D);
}
-----------------
685.9395
6859.3949999999995
68593.95
685939.5
6859395
相当于doublexdouble6859.3949999999995
这样直接用SPEL 计算会有 误差,
需要改为
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
Expression exp0 = parser.parseExpression("152431 * 0.0045");
Expression exp1 = parser.parseExpression("152431* 0.045");
Expression exp2 = parser.parseExpression("152431* 0.45");
Expression exp3 = parser.parseExpression("152431 * 4.5");
Expression exp4 = parser.parseExpression("152431 * 45");
System.out.println(exp0.getValue());
System.out.println(exp1.getValue());
System.out.println(exp2.getValue());
System.out.println(exp3.getValue());
System.out.println(exp4.getValue());
System.out.println("相当于doublexdouble" + 152431D * 0.045D);
//用BigDecimal
Expression expx = parser.parseExpression("new java.math.BigDecimal(\"152431\")* new java.math.BigDecimal(\"0.045\")");
System.out.println(expx.getValue());
}