博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Jexl实现数据库的计算公式在Java中执行
阅读量:5267 次
发布时间:2019-06-14

本文共 1714 字,大约阅读时间需要 5 分钟。

public class JexlEngineUtils {
public static BigDecimal evaluateExpression ( Map
map, String[] elementArr, String expression, int margin ){
JexlEngine jexl = new JexlEngine (); JexlContext jexlContext = new MapContext ();
//需要set源代码Math,否则报错       jexlContext.set("Math", Math.class);
//需要set源代码 BigDecimal,否则报错
jexlContext.set("BigDecimal",BigDecimal.class);         for (String key : elementArr) {
Object p = map.get ( key ); Double val = 0.0; if (null != p) {
if (p instanceof BigDecimal) {
BigDecimal temp = (BigDecimal) p; val = temp.doubleValue (); } else {
if (RegexUtils.isNumberWithDot ( p.toString () )) {
val = Double.valueOf ( p.toString () ); } } } jexlContext.set ( key, val ); } Expression e = jexl.createExpression ( expression ); Object obj = e.evaluate ( jexlContext ); BigDecimal result = new BigDecimal ( null == obj ? "0" : obj.toString () ); return result.setScale ( margin, BigDecimal.ROUND_HALF_UP ); } //因为精度问题引入BigDecimal
public static void main(String[] args) {
Map
individualIncomeTaxMap = new HashMap<>(16); individualIncomeTaxMap.put("cashRate",5334.4); individualIncomeTaxMap.put("yearPremium",200000); String[] te = {"cashRate","yearPremium"}; System.out.println(evaluateExpression(individualIncomeTaxMap,te,"Math.floor(BigDecimal.valueOf(cashRate).multiply(BigDecimal.valueOf(yearPremium).divide(BigDecimal.valueOf(1000))))",0)); } }

转载于:https://www.cnblogs.com/yiosi/p/9732635.html

你可能感兴趣的文章
283. Move Zeroes把零放在最后面
查看>>
Visual Studio Code 打开.py代码报Linter pylint is not installed解决办法
查看>>
Python 数据类型
查看>>
centos下同时启动多个tomcat
查看>>
slab分配器
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
【SVM】libsvm-python
查看>>
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
Leetcode Balanced Binary Tree
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>