java jexl_利用Jexl实现数据库的计算公式在Java中执行
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中执行相关推荐
- mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结
本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...
- swig c java gemt,利用 SWIG 转换 C/C++ 接口到 Java 接口
SWIG(Simplified Wrapper and Interface Generator)是一个将C/C++接口转换为其他语言接口的工具,从而可以讲C/C++的库集成到其他语言的系统中.目前SW ...
- JAVA的rotate怎么用,java如何利用rotate旋转图片_如何在Java中旋转图形
I have drawn some Graphics in a JPanel, like circles, rectangles, etc. But I want to draw some Graph ...
- 快速上手JDBC——Java如何在底层操作数据库
我们为什么学习这个,用一句话概括,JDBC就是用Java语言操作关系型数据库 原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句 同理,以后学习用J ...
- Oracle字符串转BooIean,利用Java的多线程技术实现数据库的访问.pdf
利用Java的多线程技术实现数据库的访问.pdf 第 卷第 期 计算机应用 22 12 Voi .22 , No . 12 年 月 2002 12 Computer Appiications Dec ...
- 利用JEXL实现动态表达式编译
转载自 利用JEXL实现动态表达式编译 背景 做项目突然遇到这样的需求: 系统要获取多个数据源的数据,并进行处理,最后输出多个字段.字段的计算规则一般是简单的取值最多加一点条件判断. 而且需要动态 ...
- Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net...
Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php c#.Net 1. -catalog与schema的设计区别1 ...
- Java 面试知识点解析(六)——数据库篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- java中删除sqlite数据库语句_sqlite数据库的介绍与java操作sqlite的实例讲解
sqlite数据库的介绍与java操作sqlite的实例讲解 发布时间:2020-10-03 05:40:34 来源:脚本之家 阅读:92 作者:Lee_Tech sqlite是啥? 1.一种轻型数据 ...
最新文章
- AI一分钟 | 蔚来赴美IPO,开盘跌破发行价;TensorFlow开源新库TFDV
- 大数据文字游戏_基于大数据的游戏化教学系统研究.docx
- Python基础入门必学内容:判断语句与循环语句
- 【Demo 0062】目录及文件基本操作
- 设置二进制或者16/32位的某一位的值
- 虚拟服务器放2个网站,如何一个虚拟主机空间放两个网站的基本原理
- C++基础08-this指针-const修饰成员函数-函数返回引用/值
- [windows+cocos2dx]CCSprite精灵类
- oracle vfp,VFP如何连SQL Server及Oracle
- C语言输出数组中最大最小值及位序
- cad卸载_CAD卸载不干净导致安装失败?别慌!老司机手把手教你卸载!
- 【RNA-seq】表达矩阵的归一化处理(RPKM,TPM,FPKM,RPM(CPM))
- pyqt5报错——ERROR: pip‘s dependency resolver does not currently take into account all the packages that
- 基于深度学习的车辆信息识别(一):车辆颜色识别
- PCAN-USB FD选型使用比较
- 个人购买得笔记本电脑都需要做哪些安全防御措施
- P4043 [AHOI2014/JSOI2014] 上下界最小费用流
- Burp Suite工具详解
- 房产中介行业解决方案
- 日拱一卒,热爱可抵岁月漫长
热门文章
- My new English
- rhcs实现mysql高可用。仲裁磁盘
- SQL:统计一个数据库中所有表记录的数量
- 【技术贴】Please verify that the Microsoft Data Access
- 12月9日10日 总结
- 第01将-Mysql体系结构与存储引擎
- 中label换行问题_如何巧妙处理 Git 多平台换行符问题(LF or CRLF)
- 移动apn接入点哪个快_最新联通上网卡APN的设置方法
- c语言dfs算法,DFS算法源程序
- mariadb安装_MariaDB CentOS 安装的时候如何确定 Repo 地址