使用 QLExpress 计算数学公式 会让代码更简洁并且能够保证高精度;
maven引入
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>QLExpress</artifactId>
<version>3.3.1</version>
</dependency>
公共方法代码块
package com.common.utils;
import com.ql.util.express.DefaultContext;
import com.ql.util.express.ExpressRunner;
import org.springframework.util.StringUtils;
/**
* @author oi77
* @date 2023/06/29 16:15:50
*/
public class QLExpressUtil {
public static double execute(double result) {
double max = Math.max(0, result);
return max;
}
public static Object toCalculate(String express ,DefaultContext<String, Object> context) throws Exception {
// @param isPrecise 是否需要高精度计算支持
// @param isTrace 是否跟踪执行指令的过程
ExpressRunner runner = new ExpressRunner(true,false);
runner.addFunctionOfClassMethod("转换", QLExpressUtil.class.getName(), "execute", new String[] {"double"}, null);
if(!StringUtils.hasText(express)){
return 0;
}
Object execute = runner.execute(express, context, null, false, false);
return execute;
}
}
// @param isPrecise 是否需要高精度计算支持
// @param isTrace 是否跟踪执行指令的过程
ExpressRunner runner = new ExpressRunner(true,false);
QLExpress引擎提供了isPrecise 和 isTrace两个属性,在ExpressRunner 初始化的时候可以指定isPrecise 是否需要高精度计算支持和isTrace 是否跟踪执行指令的过程。isTrace在调试阶段很有用,可以查看表达式执行指令的整个过程,在程序上线时,建议设置为false避免浪费资源。
测试代码