Java計算字符串公式的方式解讀
如何計算字符串公式
解決方案一
使用 commons-jexl3 jar 包
可以使用 commons-jexl3 jar包,此 jar 包提供了一些方法用于計算字符串中的公式。
maven 依賴如下:
<dependency> ?? ?<groupId>org.apache.commons</groupId> ?? ?<artifactId>commons-jexl3</artifactId> ?? ?<version>3.1</version> </dependency>
示例代碼:
@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); }
運算結(jié)果如下:防止精度丟失,計算的公式中最起碼要存在一個精度數(shù)值,如果可以盡量使用字符串的替換方法 replaceAll 替換公式中的某一個數(shù)值為精度值,這樣則不會出現(xiàn)精度丟失問題。
解決方案二
使用 JDK 底層調(diào)用 javaScript 的運算公式 (推薦使用)
JDK 自帶的類可以實現(xiàn)調(diào)用 JS 的功能,可以實現(xiàn)執(zhí)行字符串中的運算公式的功能,示例代碼如下:
@Test public void test04() throws ScriptException { ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); String strs = "27/10"; System.out.println(jse.eval(strs)); }
結(jié)果如下:使用這種方案可以直接避免精度丟失,如果公式中存在變量作為運算的元素,可以使用字符串的 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)); }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java使用html2image將html生成縮略圖圖片的實現(xiàn)示例
本文主要介紹了Java使用html2image將html生成縮略圖圖片的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-12-12關于eclipse安裝spring插件報錯An error occurred while collecting item
這篇文章主要介紹了關于eclipse安裝spring插件報錯An error occurred while collecting items to be installed...解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08Java中dubbo+zookeeper微服務架構(gòu)簡介
Apache Dubbo是一款高性能的 Java RPC 框架,這篇文章主要介紹了Java中dubbo+zookeeper微服務架構(gòu),需要的朋友可以參考下2021-09-09SpringBoot實現(xiàn)簡易支付寶網(wǎng)頁支付功能
小編最近實現(xiàn)一個功能基于springboot程序的支付寶支付demo,非常不錯適合初學者入門學習使用,今天把SpringBoot實現(xiàn)簡易支付寶網(wǎng)頁支付功能的示例代碼分享給大家,感興趣的朋友參考下吧2021-10-10基于SpringBoot+Avue實現(xiàn)短信通知功能
Avue是基于vue和element-ui的快速開發(fā)框架 ,它的核心是數(shù)據(jù)驅(qū)動UI的思想,讓我們從繁瑣的crud開發(fā)中解脫出來,本文將給大家介紹一下使用SpringBoot+Avue實現(xiàn)短信通知功能,文中有詳細的代碼示例,需要的朋友可以參考下2023-09-09