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));

}

}

java jexl_利用Jexl实现数据库的计算公式在Java中执行相关推荐

  1. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结

    本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...

  2. swig c java gemt,利用 SWIG 转换 C/C++ 接口到 Java 接口

    SWIG(Simplified Wrapper and Interface Generator)是一个将C/C++接口转换为其他语言接口的工具,从而可以讲C/C++的库集成到其他语言的系统中.目前SW ...

  3. JAVA的rotate怎么用,java如何利用rotate旋转图片_如何在Java中旋转图形

    I have drawn some Graphics in a JPanel, like circles, rectangles, etc. But I want to draw some Graph ...

  4. 快速上手JDBC——Java如何在底层操作数据库

    我们为什么学习这个,用一句话概括,JDBC就是用Java语言操作关系型数据库 原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句 同理,以后学习用J ...

  5. Oracle字符串转BooIean,利用Java的多线程技术实现数据库的访问.pdf

    利用Java的多线程技术实现数据库的访问.pdf 第 卷第 期 计算机应用 22 12 Voi .22 , No . 12 年 月 2002 12 Computer Appiications Dec ...

  6. 利用JEXL实现动态表达式编译

    转载自   利用JEXL实现动态表达式编译 背景 做项目突然遇到这样的需求: 系统要获取多个数据源的数据,并进行处理,最后输出多个字段.字段的计算规则一般是简单的取值最多加一点条件判断. 而且需要动态 ...

  7. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net...

    Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net 1. -catalog与schema的设计区别1 ...

  8. Java 面试知识点解析(六)——数据库篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

  9. java中删除sqlite数据库语句_sqlite数据库的介绍与java操作sqlite的实例讲解

    sqlite数据库的介绍与java操作sqlite的实例讲解 发布时间:2020-10-03 05:40:34 来源:脚本之家 阅读:92 作者:Lee_Tech sqlite是啥? 1.一种轻型数据 ...

最新文章

  1. AI一分钟 | 蔚来赴美IPO,开盘跌破发行价;TensorFlow开源新库TFDV
  2. 大数据文字游戏_基于大数据的游戏化教学系统研究.docx
  3. Python基础入门必学内容:判断语句与循环语句
  4. 【Demo 0062】目录及文件基本操作
  5. 设置二进制或者16/32位的某一位的值
  6. 虚拟服务器放2个网站,如何一个虚拟主机空间放两个网站的基本原理
  7. C++基础08-this指针-const修饰成员函数-函数返回引用/值
  8. [windows+cocos2dx]CCSprite精灵类
  9. oracle vfp,VFP如何连SQL Server及Oracle
  10. C语言输出数组中最大最小值及位序
  11. cad卸载_CAD卸载不干净导致安装失败?别慌!老司机手把手教你卸载!
  12. 【RNA-seq】表达矩阵的归一化处理(RPKM,TPM,FPKM,RPM(CPM))
  13. pyqt5报错——ERROR: pip‘s dependency resolver does not currently take into account all the packages that
  14. 基于深度学习的车辆信息识别(一):车辆颜色识别
  15. PCAN-USB FD选型使用比较
  16. 个人购买得笔记本电脑都需要做哪些安全防御措施
  17. P4043 [AHOI2014/JSOI2014] 上下界最小费用流
  18. Burp Suite工具详解
  19. 房产中介行业解决方案
  20. 日拱一卒,热爱可抵岁月漫长

热门文章

  1. My new English
  2. rhcs实现mysql高可用。仲裁磁盘
  3. SQL:统计一个数据库中所有表记录的数量
  4. 【技术贴】Please verify that the Microsoft Data Access
  5. 12月9日10日 总结
  6. 第01将-Mysql体系结构与存储引擎
  7. 中label换行问题_如何巧妙处理 Git 多平台换行符问题(LF or CRLF)
  8. 移动apn接入点哪个快_最新联通上网卡APN的设置方法
  9. c语言dfs算法,DFS算法源程序
  10. mariadb安装_MariaDB CentOS 安装的时候如何确定 Repo 地址