CN106528260A - 一种基于公式的自动计算方法 - Google Patents
一种基于公式的自动计算方法 Download PDFInfo
- Publication number
- CN106528260A CN106528260A CN201610988004.4A CN201610988004A CN106528260A CN 106528260 A CN106528260 A CN 106528260A CN 201610988004 A CN201610988004 A CN 201610988004A CN 106528260 A CN106528260 A CN 106528260A
- Authority
- CN
- China
- Prior art keywords
- list
- map
- variable
- value
- formula
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及JAVA开发技术领域,具体涉及一种基于公式的自动计算方法。本发明是通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值;自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值,完成变量的初始化工作;最终完成整个计算过程。本发明有效解决了java开发过程中算法调整导致的效率低、需要暂停服务等缺点;可以用于java开发过程中的算法调整。
Description
技术领域
本发明涉及JAVA开发技术领域,具体涉及一种基于公式的自动计算方法。
背景技术
目前,在JAVA的研发过程中,当一个算法需要调整时,需要通过修改代码的方式实现。算法的内部操作过程需要可以通过调整代码方便的实现,但这种效率非常低;而且当这种算法需要频繁调整时,研发人员需要不断的修改代码以适应相应的调整工作。而且这种方法还存在一个非常严重的弊端:它需要修改原来算法的java文件。这就需要对应用进行重新编辑、打包、发布,新的算法才会生效。这种方法非常不适用于目前高效、高可用的场合。
发明内容
本发明解决的技术问题在于提供一种基于公式的自动计算方法,可自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值;并完成变量的初始化工作,最终完成整个计算过程。
本发明解决上述技术问题的技术方案是:
所述的方法是通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值;自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值,完成变量的初始化工作;最终完成整个计算过程。
所述的方法是在Map对象中,key为公式中的变量名,value为变量的具体值;
在解析阶段,首先解析计算公式中所有的变更和运算符,并按顺序存放在List对象中;
在计算阶段,按照List的顺序,从前往后进行数学运算;首先通过list获取运算符及该运算符前后的变量名;然后通过该变量名,在Map中获取具体的数值;第三,根据运算符,将数值进行相应的运算,并把计算结果重新放入至Map对象中,而该结果的key值为不可重复的字符串,然后再把该字符串存放在list中;第四,把已经完成运算的变量及运算符,从list中删除;第五,通过新的list和Map,重新调用计算方法,直到计算结束。
所述的方法具体步骤如下:
第1步、初始化计算公式f,可令f=ab+c-c*d-e/f*g;
第2步、以f中的变更中key,初始化map,并把各变量的值存放至map中;
第3步、通过f中的运算符,解析公式f,并把各变量及运算符按先后顺序存放至list中;
第4步、判断list的长度是否为3,如果是,则跳转到第14步;如果为否,则跳转至第5步;
第5步、通过list,获取其下标为3的对象op;
第6步、判断op是否为乘法或除法,如果是,则跳转至第7步;如果为否,则跳转至第10步;
第7步、通过list下标2和4,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第8步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;
第9步、通过list,删除下标为4、3、2的变量;同时把minValue存放在list中,设定其下标为2;并跳回至第4步;
第10步、通过list下标1,获取运算符op;
第11步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第12步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;
第13步、通过list,删除下标为2、1、0的变量;同时把minvalue存放在list中,设定其下标为0;并跳回至第4步;
第14步、通过list下标1,获取运算符op;
第15步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第16步、根据op,对preValue和nextValue进行相应的计算,并把结果返回。
本发明的有益效果是:本发明通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值。本方法可自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值。并完成变量的初始化工作,最终完成整个计算过程。当需要调整计算过程时,只需要调整计算公式即可,整体计算过程无需做任何的调整工作。对于计算方法不停做调整的业务场合,本方法即可提供高效的实现方式,而且无需对源代码进行编辑、打包,大大提高了应用系统的可用性;而且这种方法,只需要调整公式,并完成公式中的变量,对整个过程无需做任何的调整,大大提高了开发效率,特别是在报表等算法高频调整的模块中,本方法可以提供非常良好的解决方法。
附图说明
下面结合附图对本发明进一步说明:
图1为本发明的流程图。
具体实施方式
本发明使用JAVA语言实现,它通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值。在Map对象中,key为公式中的变量名,value为变量的具体值。在解析阶段,首先解析计算公式中所有的变更和运算符,并按顺序存放在List对象中。而在计算阶段,本方法按照List的顺序,从前往后进行数学运算。首先通过list获取运算符及该运算符前后的变量名。然后通过该变量名,在Map中获取具体的数值;第三,根据运算符,将数值进行相应的运算,并把计算结果重新放入至Map对象中,而该结果的key值为不可重复的字符串,然后再把该字符串存放在list中;第四,把已经完成运算的变量及运算符,从list中删除;第五,则通过新地list和Map,重新调用计算方法,直到计算结束。通过这种递归的方法,最终使用list的变量清空,及时计算则结束。
具体步骤如下:
第1步、初始化计算公式f,如f=ab+c-c*d-e/f*g;
第2步、以f中的变更中key,初始化map,并把各变量的值存放至map中;
第3步、通过f中的运算符,解析公式f,并把各变量及运算符按先后顺序存放至list中;
第4步、判断list的长度是否为3,如果是,则跳转到第14步;如果为否,则跳转至第5步;
第5步、通过list,获取其下标为3的对象op;
第6步、判断op是否为乘法或除法,如果是,则跳转至第7步;如果为否,则跳转至第10步;
第7步、通过list下标2和4,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第8步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;
第9步、通过list,删除下标为4、3、2的变量;同时把minvalue存放在list中,设定其下标为2;并跳回至第4步;
第10步、通过list下标1,获取运算符op;
第11步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第12步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;
第13步、通过list,删除下标为2、1、0的变量;同时把minvalue存放在list中,设定其下标为0;并跳回至第4步;
第14步、通过list下标1,获取运算符op;
第15步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第16步、根据op,对preValue和nextValue进行相应的计算,并把结果返回。
如附图1所示;具体以孵化器综合管理平台的综合服务能力测评为例,演示本方法的操作过程。包括如下步骤:
第1步、初始化计算公式f,如f=ab+c-c*d-e/f*g+h/i;
第2步、通过数据库查询,初始化ab、c、d、e、f、g的值,初始化map对象:
Map<String,String>map=new HashMap<string,string>();
map·put(″ab″,″10″);
map·put(″b″,″32″);
map·put(″c″,″10″);
map·put(″d″,″5″);
map·put(″e″,″12″);
map·put(″f″,″1.2″);
map·put(″g″,″2″);
map·put(″h″,″21″);
map.put(″i″,″1″);
第3步、以map和f为参数,调整本方法的解析方法,返回list;
第4步、以map和list的参数,调用本方法的计算方法,返回结果-7。
本方法中,当公式计算过程需要做调整时,只需要调整计算公式,并设置公式中的变量值即可,因此无运算过程进行调整。本方法会根据运算公式,重新加载运算过程,并完成计算。本方法不变非常方便灵活,而且对于频繁调整计算过程的业务非常适合。整个过程也无需重新编辑、打包,只需要把修改后的xml文件替换原项目中的xml文件即可,大大提高了应用部署的难度,而且提高了服务的有效性。
Claims (3)
1.一种基于公式的自动计算方法,其特征在于:所述的方法是通过字符串的方式记录算法公式,并通过Map对象存放计算公式中变量的值;自动解析计算公式,并根据计算公式中的变量名,自动从map对象中获取具体的值,完成变量的初始化工作;最终完成整个计算过程。
2.根据权利要求1所述的自动计算方法,其特征在于:所述的方法是在Map对象中,key为公式中的变量名,value为变量的具体值;
在解析阶段,首先解析计算公式中所有的变更和运算符,并按顺序存放在List对象中;
在计算阶段,按照List的顺序,从前往后进行数学运算;首先通过list获取运算符及该运算符前后的变量名;然后通过该变量名,在Map中获取具体的数值;第三,根据运算符,将数值进行相应的运算,并把计算结果重新放入至Map对象中,而该结果的key值为不可重复的字符串,然后再把该字符串存放在list中;第四,把已经完成运算的变量及运算符,从list中删除;第五,通过新的list和Map,重新调用计算方法,直到计算结束。
3.根据权利要求1或2所述的自动计算方法,其特征在于:所述的方法具体步骤如下:
第1步、初始化计算公式f,可令f=ab+c-c*d-e/f*g;
第2步、以f中的变更中key,初始化map,并把各变量的值存放至map中;
第3步、通过f中的运算符,解析公式f,并把各变量及运算符按先后顺序存放至list中;
第4步、判断list的长度是否为3,如果是,则跳转到第14步;如果为否,则跳转至第5步;
第5步、通过list,获取其下标为3的对象op;
第6步、判断op是否为乘法或除法,如果是,则跳转至第7步;如果为否,则跳转至第10步;
第7步、通过list下标2和4,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第8步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;
第9步、通过list,删除下标为4、3、2的变量;同时把minvalue存放在list中,设定其下标为2;并跳回至第4步;
第10步、通过list下标1,获取运算符op;
第11步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第12步、根据op,对preValue和nextValue进行相应的计算,其结果记录为minValue;把minValue存放至map对象中,其key值为不可重复的值;
第13步、通过list,删除下标为2、1、0的变量;同时把minvalue存放在list中,设定其下标为0;并跳回至第4步;
第14步、通过list下标1,获取运算符op;
第15步、通过list下标0和2,获取操作数preKey和nextKey;并通过preKey和nextKey在map中获取具体的值preValue和nextValue;
第16步、根据op,对preValue和nextValue进行相应的计算,并把结果返回。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610988004.4A CN106528260A (zh) | 2016-11-10 | 2016-11-10 | 一种基于公式的自动计算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610988004.4A CN106528260A (zh) | 2016-11-10 | 2016-11-10 | 一种基于公式的自动计算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106528260A true CN106528260A (zh) | 2017-03-22 |
Family
ID=58350665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610988004.4A Withdrawn CN106528260A (zh) | 2016-11-10 | 2016-11-10 | 一种基于公式的自动计算方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106528260A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108537183A (zh) * | 2018-04-13 | 2018-09-14 | 拉扎斯网络科技(上海)有限公司 | 公式自动识别方法、装置、电子设备及存储介质 |
CN109919751A (zh) * | 2017-12-12 | 2019-06-21 | 车伯乐(北京)信息科技有限公司 | 一种金融方案的生成方法,装置及系统 |
CN109919750A (zh) * | 2017-12-12 | 2019-06-21 | 车伯乐(北京)信息科技有限公司 | 一种金融产品的解析方法,装置及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521411A (zh) * | 2011-12-28 | 2012-06-27 | 畅捷通信息技术股份有限公司 | 公式及公式数据处理装置和公式及公式数据处理方法 |
-
2016
- 2016-11-10 CN CN201610988004.4A patent/CN106528260A/zh not_active Withdrawn
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521411A (zh) * | 2011-12-28 | 2012-06-27 | 畅捷通信息技术股份有限公司 | 公式及公式数据处理装置和公式及公式数据处理方法 |
Non-Patent Citations (1)
Title |
---|
竹石: ""java执行字符串数学表达式 ScriptEngine"", 《网易博客》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109919751A (zh) * | 2017-12-12 | 2019-06-21 | 车伯乐(北京)信息科技有限公司 | 一种金融方案的生成方法,装置及系统 |
CN109919750A (zh) * | 2017-12-12 | 2019-06-21 | 车伯乐(北京)信息科技有限公司 | 一种金融产品的解析方法,装置及系统 |
CN108537183A (zh) * | 2018-04-13 | 2018-09-14 | 拉扎斯网络科技(上海)有限公司 | 公式自动识别方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106528260A (zh) | 一种基于公式的自动计算方法 | |
CN107506219A (zh) | 一种基于Android系统的通用版本升级方法 | |
CN105809473A (zh) | 匹配模型参数的训练方法、服务推荐方法及对应装置 | |
CN106681720A (zh) | 安装包压缩、解压方法及装置 | |
CN107679136A (zh) | 拉链表的存储方法及存储系统 | |
CN106055659A (zh) | 一种歌词数据匹配方法及其设备 | |
CN108845843A (zh) | 一种函数处理方法、装置以及相关设备 | |
CN108241503A (zh) | 注释说明的生成方法及装置 | |
JP5791121B2 (ja) | コスト算出装置、コスト算出方法、及びプログラム | |
CN105630756A (zh) | 数据处理设备和方法 | |
CN106919576A (zh) | 利用二级类目下的关键词库搜索应用程序的方法及装置 | |
Westenbroek et al. | Approaches in highly parameterized inversion: TSPROC, a general time-series processor to assist in model calibration and result summarization | |
CN115858719B (zh) | 一种基于大数据分析的sim卡活跃度预测方法及系统 | |
CN106202523A (zh) | 网页编辑方法及装置 | |
CN113723706B (zh) | 页岩气井重复压裂产能预测方法、装置、终端及存储介质 | |
CN114756742A (zh) | 一种信息推送方法及装置、存储介质 | |
CN101867955A (zh) | 基于Gompertz函数的异网用户数预测方法 | |
CN111698276B (zh) | 一种歌曲更新方法及点唱设备 | |
Bot et al. | A stakeholder-centric software architecture analysis approach | |
CN112836033A (zh) | 业务模型的管理方法、装置、设备及存储介质 | |
CN106933834B (zh) | 一种数据匹配方法及装置 | |
CN115774565B (zh) | 一种单代码仓库建设方法及系统及装置及介质 | |
CN107239395B (zh) | 一种源代码中无效函数的查找方法和设备 | |
CN115495499B (zh) | 一种基于污染场地同介质多批次海量数据的整合统计方法 | |
CN104685492B (zh) | 数据分析支援装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20170322 |