博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA如何计算字符串公式
阅读量:3946 次
发布时间:2019-05-24

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

JAVA如何计算字符串公式

解决方案一:使用 commons-jexl3 jar 包

可以使用 commons-jexl3 jar包,此 jar 包提供了一些方法用于计算字符串中的公式。

maven 依赖如下:

org.apache.commons
commons-jexl3
3.1

示例代码:

@Test    public void test03() {
String expressionString = "27.0/10"; JexlEngine jexlEngine = new JexlBuilder().create(); JexlExpression jexlExpression = jexlEngine.createExpression(expressionString); Object evaluate = jexlExpression.evaluate(null); System.out.println(evaluate); }

运算结果如下:防止精度丢失,计算的公式中最起码要存在一个精度数值,如果可以尽量使用字符串的替换方法 replaceAll 替换公式中的某一个数值为精度值,这样则不会出现精度丢失问题。

在这里插入图片描述

解决方案二:使用 JDK 底层调用 javaScript 的运算公式 (推荐使用)

JDK 自带的类可以实现调用 JS 的功能,可以实现执行字符串中的运算公式的功能,示例代码如下:

@Test    public void test04() throws ScriptException {
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); String strs = "27/10"; System.out.println(jse.eval(strs)); }

结果如下:使用这种方案可以直接避免精度丢失,如果公式中存在变量作为运算的元素,可以使用字符串的 replaceAll 方法来进行替换。

在这里插入图片描述
替换方式示例代码如下:

@Test    public void test04() throws ScriptException {
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); String strs = "1+b"; strs = strs.replace("b", "9"); System.out.println(jse.eval(strs)); }

转载地址:http://evqwi.baihongyu.com/

你可能感兴趣的文章
android 保存具有不同前缀的同一号码分别为A和B,用其中一个呼叫,通话记录一直显示另一个联系人名字的问题
查看>>
android 在手机中预置联系人/Service Number
查看>>
android 系统语言为英语时,Contacts联系人名字含有特殊前缀后缀(Dr. Mr. Lt等)时的相关问题处理
查看>>
android 短信下,添加联系人,进入联系人多选界面出现联系人电话号码晃动的问题
查看>>
android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题
查看>>
正确学习javascript。困惑的指南
查看>>
SERO幻影社区的背景怎么样?几大主流隐私币种技术分析!
查看>>
SERO目前具备的十大技术特点
查看>>
Neo4j CQL语句学习Day3
查看>>
Neo4j CQL学习Day4
查看>>
Mysql 数据库
查看>>
MySQL数据库练习
查看>>
Neo4j学习Day5
查看>>
Tomcat的基本配置
查看>>
Neo4j学习Day6~7
查看>>
Servlet学习笔记
查看>>
JSP相关介绍
查看>>
Session和Cookie
查看>>
数据库系统原理与设计复习笔记
查看>>
MVC设计模式
查看>>