Spads 公式解析系統 Java

2021-09-01 13:36:31 字數 1393 閱讀 9646

result ?= ((2^5 - (-13)) % 10)!
能夠得到 120 。

接下來,讓我們看看公式系統的分支控制。

daycount ?= 31

daycost ?= 58.5

limit ?= 1500

result ?= daycount * daycost > limit ? "超支了!" ~ "沒超支"

我們看到整個公式分為四行。每行宣告了乙個變數。

實際上在這個公式系統中,並不嚴格要求上邊的公式不能夠使用下邊公式宣告的變數,但如果巢狀使用則會丟擲異常。

上述公式將得到乙個字串,內容是「超支了」。

支援的有關運算如下:

大於 >

小於 <

等於 =

與 &或 |

非 -(這個和 c 語言系列的 ! 有所不同)

條件 ?

分支 ~(這個和 c 語言系列的 : 有所不同)

這個系統最重要的特性,就是能夠把公式中出現的函式,和本地函式繫結起來。

只需要製作 function 介面的實現類,並且在 functionenum 對其進行註冊,就能夠得到一種可以在公式中識別的函式。

我最近學習了「約定優於明示」的思想,近期會將這種 functionenum 配置方式進行一定程度的更改。

比如,我提供了內建函式 together ,其含義是以第乙個引數為名稱,第二個引數為值,構成鍵值對;第三個引數為名稱,第四個引數為值,構成鍵值對;等等。最終將其組合成 json 字串。請看如下公式。

name ?= "shane"

level ?= 16

result ?= together(\"name\", name, "graduated", level > 10 ? "畢業了" ~ "沒畢業")

最終結果為

說了這麼多公式解析系統的用法。現在來從程式設計角度介紹一下如何啟用此系統功能。

首先,肯定是要匯入 .jar 包。然後參看以下**。

evaluato***ctory factory = evaluato***ctory.inst;

evaluator eva = factory.getevaluator("result ?= 28 + 2 / 10.0");

expvalue result = eva.evaluate();

system.out.println(result);

或者

string form = "result ?= 28 + 2 / 10.0";

expvalue result = evaluato***ctory.inst.getevaluator(form).evaluate();

本文也在我的 csdn 日誌中發表:

java 計算PMT公式

計算還款本金和利息 param amortizingmode 還款型別 param amount 貸款金額 param rate 利率 param period 時間間隔 1次 2次 n次 param repaytype 還款間隔型別 年 月 日 param repayday 還款日期 param ...

報文解析 Excel公式自動解析CAN報文的方法

在can網路上擷取的報文一般被儲存為為.txt或.asc等格式,在分析報文時經常需要對著協議來逐條報文 逐個位元組甚至逐節來解析。為了應對這種情況,行業內也是提出了各種解決方案,比如vector的can報文軟體,或者自己寫上位機來自動解析,再或者將對應報文匯入進excel中用公式自動解析 本文詳細介...

第三天 解析公式

openpyxl對單元格內的公式支援有限。openpyxl.formula包包含了乙個tokenizer類,它可以將公式分割成構成該公式的token。用法如下 from openpyxl.formula import tokenizer tok tokenizer if a 1,then true ...