麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網(wǎng)站 > 幫助中心 > 正文

使用java處理字符串公式運(yùn)算的方法

2024-07-09 22:47:52
字體:
供稿:網(wǎng)友

  在改進(jìn)一個(gè)關(guān)于合同的項(xiàng)目時(shí),有個(gè)需求,就是由于合同中非數(shù)據(jù)項(xiàng)的計(jì)算公式會(huì)根據(jù)年份而進(jìn)行變更,而之前是將公式硬編碼到系統(tǒng)中的,只要時(shí)間一變,系統(tǒng)就沒法使用了,因此要求合同中各個(gè)非基礎(chǔ)數(shù)據(jù)的項(xiàng)都能自定義公式,根據(jù)設(shè)置的公式來自動(dòng)生成報(bào)表和合同中的數(shù)據(jù)。

  顯然定義的公式都是以字符串來存儲(chǔ)到數(shù)據(jù)庫的,可是java中沒有這種執(zhí)行字符串公式的工具或者類,而且是公式可以嵌套一個(gè)中間公式。比如:基礎(chǔ)數(shù)據(jù)dddd是56,而一個(gè)公式是依賴dddd的,eeee=dddd*20,而最終的公式可能是這樣:eeee*-12+13-dddd+24??芍猠eee是一個(gè)中間公式,所以一個(gè)公式的計(jì)算需要知道中間公式和基礎(chǔ)數(shù)據(jù)。

這好像可以使用一個(gè)解釋器模式來解決,但是我沒有成功,因?yàn)槔ㄌ?hào)的優(yōu)先級(jí)是一個(gè)棘手的問題,后來又想到可以使用freemarker類似的模板引擎或者java6之后提供的ScriptEngine 腳本引擎,做了個(gè)實(shí)驗(yàn),腳本引擎可以解決,但是這限制了必須使用java6及以上的版本。最終功夫不負(fù)有心人,終于找到了完美解決方案,即后綴表達(dá)式。我們平時(shí)寫的公式稱作中綴表達(dá)式,計(jì)算機(jī)處理起來比較困難,所以需要先將中綴表達(dá)式轉(zhuǎn)換成計(jì)算機(jī)處理起來比較容易的后綴表達(dá)式。

將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式具體算法規(guī)則:見后綴表達(dá)式


   a.若為 '(',入棧;

   b.若為 ')',則依次把棧中的的運(yùn)算符加入后綴表達(dá)式中,直到出現(xiàn)'(',從棧中刪除'(' ;

   c.若為 除括號(hào)外的其他運(yùn)算符 ,當(dāng)其優(yōu)先級(jí)高于棧頂運(yùn)算符時(shí),直接入棧。否則從棧頂開始,依次彈出比當(dāng)前處理的運(yùn)算符優(yōu)先級(jí)高和優(yōu)先級(jí)相等的運(yùn)算符,直到一個(gè)比它優(yōu)先級(jí)低的或者遇到了一個(gè)左括號(hào)為止。

   ·當(dāng)掃描的中綴表達(dá)式結(jié)束時(shí),棧中的的所有運(yùn)算符出棧; 

我們提出的要求設(shè)想是這樣的:

復(fù)制代碼 代碼如下:

public class FormulaTest {
     @Test
     public void testFormula() {
         //基礎(chǔ)數(shù)據(jù)
         Map<String, BigDecimal> values = new HashMap<String, BigDecimal>();
         values.put("dddd", BigDecimal.valueOf(56d));

         //需要依賴的其他公式
         Map<String, String> formulas = new HashMap<String, String>();
         formulas.put("eeee", "#{dddd}*20");

         //需要計(jì)算的公式
         String expression = "#{eeee}*-12+13-#{dddd}+24";
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 日韩一级片 | 国产18成人免费视频 | 国产精品观看在线亚洲人成网 | 色综合网在线观看 | 欧美成年人视频 | 黄网站免费入口 | 欧美一a一片一级一片 | 黄色一级片毛片 | 色视频91 | 精品一区二区三区免费毛片爱 | 午夜精品福利视频 | 日韩深夜视频 | 午夜视频在线观 | 日韩欧美电影在线观看 | 日本人乱人乱亲乱色视频观看 | av在线等 | 91中文在线观看 | 狼伊千合综网中文 | 日韩电影一区二区 | 羞羞视频免费入口网站 | 亚洲成人综合网站 | 国产精品免费久久久久 | 4p嗯啊巨肉寝室调教男男视频 | 久久777国产线看观看精品 | 久久日本 | 久久亚洲精品国产一区 | 久久伊人精品热在75 | 久久综合婷婷香五月 | 激情综合在线观看 | av手机在线免费播放 | 麻豆视频在线免费观看 | 日本黄色一级视频 | 中文字幕网站在线 | 成人高清网站 | 久久久久久久久日本理论电影 | 欧美不卡在线 | 在线观看免费毛片视频 | 亚洲资源在线播放 | 日本欧美中文字幕 | www69xxxxx| 欧美一级做a |