專利名稱::自動(dòng)計(jì)算數(shù)值的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及公式計(jì)算,具體而言,涉及一種自動(dòng)計(jì)算數(shù)值的方法和裝置。技術(shù)背景隨著應(yīng)用系統(tǒng)的廣泛使用,根據(jù)系統(tǒng)提供的計(jì)算公式設(shè)計(jì)器,客戶自己設(shè)置計(jì)算公式,得出相關(guān)的結(jié)果并加以應(yīng)用越來(lái)越廣泛。并且公式的復(fù)雜度也越來(lái)越高,如何能提供一種比較簡(jiǎn)單,切實(shí)可行的公式解析算法,就顯得比較重要。目前計(jì)算公式的復(fù)雜程度概況描述如下1、支持四則運(yùn)算2、支持邏輯運(yùn)算3、支持比較運(yùn)算4、支持公式嵌套公式解析計(jì)算公式主要由以下辦法1、采用目前主流語(yǔ)言提供的公式引擎解析計(jì)算公式,這種算法可以解決一部分客戶的業(yè)務(wù)需求,但對(duì)客戶要求比較復(fù)雜,并且數(shù)據(jù)來(lái)源比較復(fù)雜的公式來(lái)說(shuō),還是很難解決的。2、采用遍歷字符串的方式,獲取字符串中的各種運(yùn)算符號(hào)和運(yùn)算值,根據(jù)運(yùn)算符號(hào)的不同,采取遞歸的算法依次獲取計(jì)算,得到最終的結(jié)果。這種算法可以滿足客戶的全部業(yè)務(wù)場(chǎng)景,但對(duì)字符串解析要求程度很高,還要用到入棧出棧操作,所有不慎可能導(dǎo)致計(jì)算結(jié)果錯(cuò)誤。因此,需要一種新的公式計(jì)算方式,能夠針對(duì)復(fù)雜的數(shù)據(jù)進(jìn)行解析,并能夠降低解析的復(fù)雜性,防止計(jì)算出錯(cuò)。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問(wèn)題在于,提供一種新的公式計(jì)算方式,能夠針對(duì)復(fù)雜的數(shù)據(jù)進(jìn)行解析,并能夠降低解析的復(fù)雜性,防止計(jì)算出錯(cuò)。有鑒于此,本發(fā)明提供一種自動(dòng)計(jì)算數(shù)值的方法,包括步驟102,通過(guò)解析器,將公式解析為元素和運(yùn)算符;步驟104,獲取所述元素的值;步驟106,使用所述元素的值結(jié)合所述運(yùn)算符進(jìn)行計(jì)算,以獲取所述公式的結(jié)果。通過(guò)該技術(shù)方案,將公式解析為元素和運(yùn)算符后,能夠有效率地對(duì)公式進(jìn)行計(jì)算。在上述技術(shù)方案中,優(yōu)選地,在所述步驟102中,通過(guò)正則表達(dá)式對(duì)所述公式進(jìn)行解析。在上述技術(shù)方案中,優(yōu)選地,在所述步驟102中,還使用特殊字符替代所述元素,與所述運(yùn)算符組成算式表達(dá)式;在所述步驟106中,將所述元素的值替代所述算式表達(dá)式中的所述特殊字母,計(jì)算所述算式表達(dá)式以獲取所述公式的結(jié)果。在上述技術(shù)方案中,優(yōu)選地,所述元素包括常量、參數(shù)、函數(shù)和/或嵌套的公式,所述運(yùn)算符包括加、減、乘、除和/或括號(hào)。在上述技術(shù)方案中,優(yōu)選地,在所述步驟104中,在所述元素包括所述嵌套的公式時(shí),將所述嵌套的公式返回所述步驟102。本發(fā)明還提供一種自動(dòng)計(jì)算數(shù)值的裝置,包括公式解析模塊,將公式解析為元素和運(yùn)算符;元素取值模塊,獲取所述元素的值;公式計(jì)算模塊,使用所述元素的值結(jié)合所述運(yùn)算符進(jìn)行計(jì)算,以獲取所述公式的結(jié)果。通過(guò)該技術(shù)方案,將公式解析為元素和運(yùn)算符后,能夠有效率地對(duì)公式進(jìn)行計(jì)算。在上述技術(shù)方案中,優(yōu)選地,所述公式解析模塊通過(guò)正則表達(dá)式對(duì)所述公式進(jìn)行解析。在上述技術(shù)方案中,優(yōu)選地,所述公式解析模塊還使用特殊字符替代所述元素,與所述運(yùn)算符組成算式表達(dá)式;所述公式計(jì)算模塊將所述元素的值替代所述算式表達(dá)式中的所述特殊字母,計(jì)算所述算式表達(dá)式以獲取所述公式的結(jié)果。在上述技術(shù)方案中,優(yōu)選地,所述元素包括常量、參數(shù)、函數(shù)和/或嵌套的公式,所述運(yùn)算符包括加、減、乘、除和/或括號(hào)。在上述技術(shù)方案中,優(yōu)選地,在所述元素包括所述嵌套的公式時(shí),所述元素取值模塊將所述嵌套的公式返回給所述公式解析模塊。通過(guò)以上技術(shù)方案,可以實(shí)現(xiàn)一種自動(dòng)計(jì)算數(shù)值的方法和裝置,通過(guò)巧用元素分離法把計(jì)算公式字符串分為兩部分,計(jì)算表達(dá)式和元素,首先得出元素的值,然后調(diào)用計(jì)算表達(dá)式得到計(jì)算公式的最終結(jié)果,較簡(jiǎn)單實(shí)用,易于理解和實(shí)現(xiàn),可以快速的解析計(jì)算公式并得到準(zhǔn)確的結(jié)果。圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的方法的流程圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的裝置的框圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的裝置的解析過(guò)程示意圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的裝置的計(jì)算過(guò)程示意圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的方法的流程圖。具體實(shí)施方式為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可以采用其他不同于在此描述的其他方式來(lái)實(shí)施,因此,本發(fā)明并不限于下面公開(kāi)的具體實(shí)施例的限制。圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的方法的流程圖。如圖1所示,有鑒于此,本發(fā)明提供一種自動(dòng)計(jì)算數(shù)值的方法,包括步驟102,通過(guò)解析器,將公式解析為元素和運(yùn)算符;步驟104,獲取所述元素的值;步驟106,使用所述元素的值結(jié)合所述運(yùn)算符進(jìn)行計(jì)算,以獲取所述公式的結(jié)果。通過(guò)該技術(shù)方案,將公式解析為元素和運(yùn)算符后,能夠有效率地對(duì)公式進(jìn)行計(jì)算。4在上述技術(shù)方案中,在所述步驟102中,通過(guò)正則表達(dá)式對(duì)所述公式進(jìn)行解析。在上述技術(shù)方案中,在所述步驟102中,還使用特殊字符替代所述元素,與所述運(yùn)算符組成算式表達(dá)式;在所述步驟106中,將所述元素的值替代所述算式表達(dá)式中的所述特殊字母,計(jì)算所述算式表達(dá)式以獲取所述公式的結(jié)果。在上述技術(shù)方案中,所述元素包括常量、參數(shù)、函數(shù)和/或嵌套的公式,所述運(yùn)算符包括加、減、乘、除和/或括號(hào)。在上述技術(shù)方案中,在所述步驟104中,在所述元素包括所述嵌套的公式時(shí),將所述嵌套的公式返回所述步驟102。圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的裝置的框圖。如圖2所示,本發(fā)明還提供一種自動(dòng)計(jì)算數(shù)值的裝置200,包括公式解析模塊202,將公式解析為元素和運(yùn)算符;元素取值模塊204,獲取所述元素的值;公式計(jì)算模塊206,使用所述元素的值結(jié)合所述運(yùn)算符進(jìn)行計(jì)算,以獲取所述公式的結(jié)果。通過(guò)該技術(shù)方案,將公式解析為元素和運(yùn)算符后,能夠有效率地對(duì)公式進(jìn)行計(jì)算。在上述技術(shù)方案中,所述公式解析模塊202通過(guò)正則表達(dá)式對(duì)所述公式進(jìn)行解析。在上述技術(shù)方案中,所述公式解析模塊202還使用特殊字符替代所述元素,與所述運(yùn)算符組成算式表達(dá)式;所述公式計(jì)算模塊206將所述元素的值替代所述算式表達(dá)式中的所述特殊字母,計(jì)算所述算式表達(dá)式以獲取所述公式的結(jié)果。在上述技術(shù)方案中,所述元素包括常量、參數(shù)、函數(shù)和/或嵌套的公式,所述運(yùn)算符包括加、減、乘、除和/或括號(hào)。在上述技術(shù)方案中,在所述元素包括所述嵌套的公式時(shí),所述元素取值模塊204將所述嵌套的公式返回給所述公式解析模塊202。圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的裝置的解析過(guò)程示意圖。如圖3所示,本實(shí)施例中的自動(dòng)計(jì)算數(shù)值的裝置的公式解析模塊公式本質(zhì)就是一個(gè)字符串,不管采用哪種算法解析,最終的計(jì)算步驟都要進(jìn)行代數(shù)運(yùn)算,如簡(jiǎn)單的四則運(yùn)算,帶括號(hào)的四則運(yùn)算等。根據(jù)代數(shù)運(yùn)算的特點(diǎn),公式解析模塊將計(jì)算公式可以分為兩部分,運(yùn)算符304和元素302運(yùn)算符304包括進(jìn)行代數(shù)元素的符號(hào),可以是加、減、乘除、括號(hào)等運(yùn)算符。元素302參與代數(shù)運(yùn)算的字符串,可以是常量、參數(shù)、函數(shù)、計(jì)算公式。圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的裝置的計(jì)算過(guò)程示意圖。如圖4所示,本實(shí)施例中的自動(dòng)計(jì)算數(shù)值的裝置中的公式解析模塊利用正則表達(dá)式分離計(jì)算公式源字符串,獲取運(yùn)算符和元素,元素取值模塊將元素用特殊的字母表示,如“elementl”,把源字符串變?yōu)榇鷶?shù)運(yùn)算字符串元素取值模塊根據(jù)元素類型不同,采取不同的算法獲取元素值,具體如下1、常量元素直接獲取數(shù)值即可2、表中字段參數(shù)元素根據(jù)查詢條件獲取表中數(shù)值即可3、內(nèi)置函數(shù)元素調(diào)用函數(shù)計(jì)算方法獲取元素值4、邏輯運(yùn)算元素調(diào)用邏輯運(yùn)算函數(shù),獲取元素值5、比較運(yùn)算元素調(diào)用比較運(yùn)算函數(shù)獲取元素值6、嵌套公式提前計(jì)算公式,根據(jù)本算法首先計(jì)算嵌套計(jì)算公式的值,得到元素值最后,自動(dòng)計(jì)算數(shù)值的裝置中的公式計(jì)算模塊由把元素值代入代數(shù)運(yùn)算字符串,調(diào)用各種語(yǔ)言直接提供的代數(shù)運(yùn)算函數(shù),得到計(jì)算公式結(jié)果(如C#可以調(diào)用datatable.compare()方法)圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施例的自動(dòng)計(jì)算數(shù)值的方法的流程圖。如圖5所示,本實(shí)施例的自動(dòng)計(jì)算數(shù)值的方法的工作流程如下步驟502,進(jìn)行計(jì)算公式字符串的定義某應(yīng)用系統(tǒng)應(yīng)發(fā)工資計(jì)算公式定義如下應(yīng)發(fā)工資=基本工資+績(jī)效工資*績(jī)效系數(shù)-扣繳保險(xiǎn)數(shù)額-扣繳公積金數(shù)額,其中,基礎(chǔ)數(shù)據(jù)預(yù)置如下工資表權(quán)利要求1.一種自動(dòng)計(jì)算數(shù)值的方法,其特征在于,包括步驟102,通過(guò)解析器,將公式解析為元素和運(yùn)算符;步驟104,獲取所述元素的值;步驟106,使用所述元素的值結(jié)合所述運(yùn)算符進(jìn)行計(jì)算,以獲取所述公式的結(jié)果。2.根據(jù)權(quán)利要求1所述的自動(dòng)計(jì)算數(shù)值的方法,其特征在于,在所述步驟102中,通過(guò)正則表達(dá)式對(duì)所述公式進(jìn)行解析。3.根據(jù)權(quán)利要求1所述的自動(dòng)計(jì)算數(shù)值的方法,其特征在于,在所述步驟102中,還使用特殊字符替代所述元素,與所述運(yùn)算符組成算式表達(dá)式;在所述步驟106中,將所述元素的值替代所述算式表達(dá)式中的所述特殊字母,計(jì)算所述算式表達(dá)式以獲取所述公式的結(jié)果。4.根據(jù)權(quán)利要求1至3中任一項(xiàng)所述的自動(dòng)計(jì)算數(shù)值的方法,其特征在于,所述元素包括常量、參數(shù)、函數(shù)和/或嵌套的公式,所述運(yùn)算符包括加、減、乘、除和/或括號(hào)。5.根據(jù)權(quán)利要求4所述的自動(dòng)計(jì)算數(shù)值的方法,其特征在于,在所述步驟104中,在所述元素包括所述嵌套的公式時(shí),將所述嵌套的公式返回所述步驟102。6.一種自動(dòng)計(jì)算數(shù)值的裝置,其特征在于,包括公式解析模塊,將公式解析為元素和運(yùn)算符;元素取值模塊,獲取所述元素的值;公式計(jì)算模塊,使用所述元素的值結(jié)合所述運(yùn)算符進(jìn)行計(jì)算,以獲取所述公式的結(jié)果。7.根據(jù)權(quán)利要求6所述的自動(dòng)計(jì)算數(shù)值的裝置,其特征在于,所述公式解析模塊通過(guò)正則表達(dá)式對(duì)所述公式進(jìn)行解析。8.根據(jù)權(quán)利要求6所述的自動(dòng)計(jì)算數(shù)值的裝置,其特征在于,所述公式解析模塊還使用特殊字符替代所述元素,與所述運(yùn)算符組成算式表達(dá)式;所述公式計(jì)算模塊將所述元素的值替代所述算式表達(dá)式中的所述特殊字母,計(jì)算所述算式表達(dá)式以獲取所述公式的結(jié)果。9.根據(jù)權(quán)利要求6至8中任一項(xiàng)所述的自動(dòng)計(jì)算數(shù)值的裝置,其特征在于,所述元素包括常量、參數(shù)、函數(shù)和/或嵌套的公式,所述運(yùn)算符包括加、減、乘、除和/或括號(hào)。10.根據(jù)權(quán)利要求9所述的自動(dòng)計(jì)算數(shù)值的裝置,其特征在于,在所述元素包括所述嵌套的公式時(shí),所述元素取值模塊將所述嵌套的公式返回給所述公式解析模塊。全文摘要本發(fā)明提供一種自動(dòng)計(jì)算數(shù)值的方法,包括步驟102,通過(guò)解析器,將公式解析為元素和運(yùn)算符;步驟104,獲取所述元素的值;步驟106,使用所述元素的值結(jié)合所述運(yùn)算符進(jìn)行計(jì)算,以獲取所述公式的結(jié)果。本發(fā)明還提供一種自動(dòng)計(jì)算數(shù)值的裝置。通過(guò)本發(fā)明,將公式解析為元素和運(yùn)算符后,能夠有效率地對(duì)公式進(jìn)行計(jì)算。文檔編號(hào)G06F17/11GK102043758SQ20101061645公開(kāi)日2011年5月4日申請(qǐng)日期2010年12月30日優(yōu)先權(quán)日2010年12月30日發(fā)明者李勝,王丙建申請(qǐng)人:暢捷通軟件有限公司