`

数学表达式解析计算

 
阅读更多

  最近在做一个项目,但是在项目运算的过程中遇到一个问题,需求方在进行相关参数运算时,

需要根据系统总已有的计算公式(加减乘除、对数函数、幂指函数等)进行运算:比如下面的公式

ln(B) = a + b * ln(c^2*d),起初的思路是对每个表达式写一个对应计算函数,在运算时候只需要

根据用户的选择选择重载的函数即可,即不需要对函数表达式进行存储。

   但是需求方还有一个需求,就是用户可以根据自己的实际情况进行公式的自定义。于是一个公式

对应一个函数的思路算是不能实施了,最好是有一款符合四则运算并支持常见函数的工具包,如下:

   JEP是Java expression parser的简称,即java表达式分析器,Jep是一个用来转换和计算数学表达式

的java库。通过这个程序包,用户可以以字符串的形式输入一个、任意的公式,然后快速地计算出

结果。Jep支持用户自定义变量、常量和函数。

网址:http://www.singularsys.com/jep/

   因为网上示例比较少,大多只是对加减乘除的运算:自己根据以往经验写了一小示例希望对大家起到

抛砖引玉的作用:

package org.mino.jep;

import com.singularsys.jep.Jep;
import com.singularsys.jep.JepException;

public class SimpleExample {
	public static void main(String[] args) throws JepException {
		Jep jep = new Jep(); //一个数学表达式
/*		String exp = "((a+b)*(c+b))/(c+a)/b"; // 给变量赋值
		jep.addVariable("a", 10);
		jep.addVariable("b", 10);
		jep.addVariable("c", 10);
*/
////	String exp = "log (b)";
//		String exp = "pow(a,b)";
//		jep.addVariable("a", 10);
//		jep.addVariable("b" , 10);
		
		//String exp = "ln(b)";
//		jep.addVariable("b", 8);
		
		String exp = "r = a+b*ln(pow(c,2)*d)";//運算結束后需要在進行pow根據公式
		jep.addVariable("a", 1);
		jep.addVariable("b", 2);
		jep.addVariable("c", 3);
		jep.addVariable("d", 4);
		try { // 执行
			jep.parse(exp);
			Object result = jep.evaluate();
			System.out.println("计算结果: " + result);
			System.out.println(jep.getVariableValue("r"));
		} catch (JepException e) {
			System.out.println("An error occured: " + e.getMessage());
		}
	}
}

 PS:1、"r = a+b*ln(pow(c,2)*d)" 可以运算但"ln(r) = a+b*ln(pow(c,2)*d)"不可以运算;2、函数运算地方一定使用"()",会识别ln(a)但能识别lna;3、尽量多使用"()"避免产生歧义。附件为工具包

分享到:
评论

相关推荐

    Go-使用Go实现的数学表达式解析计算引擎

    《Go实现的数学表达式解析计算引擎详解》 在编程领域,实现一个数学表达式解析计算引擎是一项常见的挑战,它涉及到计算机科学中的编译原理、语法分析和算法设计等多个核心概念。本文将深入探讨如何使用Go语言来创建...

    c++数学表达式解析

    在C++编程中,实现一个数学表达式解析器是一项常见的任务,它允许程序处理和求解用户输入的数学表达式。本项目旨在提供一个简单易懂的C++计算器实现,支持括号和基本的四则运算(加、减、乘、除)。通过使用波兰...

    math-engine:数学表达式解析和计算引擎库。数学表达式解析计算引擎库

    使用Go实现的数学表达式解析计算引擎库,它小巧,无任何依赖,具有扩展性(可以将自己的函数到引擎中),比较完整的完成了数学表达式解析执行,包括词法分析,语法分析,构建AST,运行。 go get -u github....

    数学表达式解析器java语言描述

    数学表达式解析器是计算机科学中的一个重要工具,它允许程序理解和计算由人类编写的数学表达式。在Java语言中,实现这样一个解析器涉及到多个关键概念和技术。本篇将深入探讨这些知识点。 首先,数学表达式解析器的...

    一个基于纯js实现的数学表达式客户端计算及解析的程序源码

    1. **数学表达式解析**: 在这个程序中,`Evaluator.js`是关键组件,它负责处理数学表达式的解析和计算。JavaScript自身并不直接支持复杂的数学表达式解析,所以这个库提供了一个自定义的解决方案。解析过程可能...

    Java 数学表达式解析器

    可以支持复杂的数学表达式(常量、变量、带括号)的计算 如123 + (a * 456)/c - (d + 789) 输入变量值,展示计算步骤和结果 目前支持+ - * / 幂 cos等操作 操作符可方便扩展

    表达式解析引擎(支持等式表达式,不等式表达式,与或非逻辑运算表达式,支持带参数和带函数的表达式解析),可以在电脑,单片及上运行

    C语言版的等式表达式解析,不等式表达式解析,与或非逻辑运算表达式解析;支持带参数的表达式解析; 支持带函数的表达式解析。 1、支持 +、-、*、/、%、&&、||、!、>、<、>=、、==、!=、^(幂)、(、) 运算符 2、支持...

    java数学表达式计算程序设计报告

    除了 Java Math 类库,项目可能还编写了一些自定义方法来处理特定的计算逻辑,如处理运算符优先级、括号等复杂的表达式解析。 8. 知识点:软件生命周期 本项目遵循软件开发的生命周期,从需求分析、设计、编码、...

    delphi 教你如何做表达式解析器

    表达式解析器是用来读取、分析和解释数学或逻辑表达式的程序,它可以将输入的字符串(如“2 + 3 * (4 - 1)”)转化为计算机可以理解的形式,以便进行计算。在这个过程中,词法分析和语法分析是两个核心步骤。 词法...

    C++支持的表达式解析

    使用boost::sprirt编写的表达式解析器,代码很容易扩展,功能很强大,适合做功能强大的客户化定义程序。 -----------表达式解析--------- 已定义的函数有:PI,SIN,COS,TAN,,ABS,EXP,LOGN,POW,SQRT,FORMAT,LENGTH,...

    数学表达式计算c++

    1. **表达式解析**:在C++中,实现表达式计算的第一步是将输入的字符串转换为可执行的形式。这通常涉及到语法分析(词法分析和语法分析),可能需要使用到编译原理中的概念,如有限状态自动机(FSA)或推导树。你...

    Java数学表达式计算(Expression Evaluator)

    在Java编程中,处理数学表达式的计算是一项常见的任务,尤其在需要动态计算或者解析用户输入时。本主题将深入探讨如何在Java中实现一个数学表达式计算器,这通常被称为"Expression Evaluator"。我们将讨论相关的技术...

    汇编课程设计 数学表达式的计算

    这个项目采用汇编语言来构建一个简单的计算器,其功能是解析并计算任意的数学表达式。汇编语言是一种底层编程语言,它直接对应于机器指令,使得开发者能够对计算机硬件进行精细控制,从而实现高效且精确的计算。 ...

    通用的数学表达式编译计算动态库 v2.2.rar_V2 _数学表达式_表达式

    1. **表达式解析**:将输入的字符串形式的数学表达式转换成内部的数据结构,这一步通常涉及到词法分析和语法分析。 2. **变量管理**:支持用户定义的变量,能够在计算过程中进行赋值和引用。 3. **数学函数支持**:...

    数学表达式解析器(中缀表达式求值)

    在计算机科学领域,数学表达式解析器是一种程序,它能够接收数学表达式的字符串形式,并将其转化为可执行的形式,以便计算出结果。在这个项目中,我们关注的是一个使用C/C++编程语言实现的数学表达式解析器,它基于...

    计算器【解析数学表达式】

    在本项目中,我们讨论的是一个使用Java编程语言编写的简易计算器,它的主要功能是解析并计算数学表达式。这个计算器的设计与实现涉及到计算机科学中的多个核心知识点,包括递归算法、表达式解析、数据结构以及课程...

    输入字符串数学表达式自动编译成数学表达式

    总的来说,将字符串数学表达式编译成可计算的表达式是一项涉及解析技术、符号计算和编程技能的综合任务,它在许多科学和工程领域都有着广泛的应用。理解并掌握这一技术,能帮助我们更好地开发和使用复杂的数学计算...

    java 计算数学表达式

    Java标准库中并没有内置的数学表达式解析器,但你可以自定义解析器,或者使用Java的`ScriptEngine`接口,如JavaScript引擎(`javax.script.ScriptEngineManager`和`javax.script.ScriptEngine`),来执行数学表达式...

    calculator:Javascript的数学表达式解析器

    计算器Javascript的数学表达式解析器。 可在微信小程序中使用支持IE9 + 支持AMD / CommonJS 支持定制运营商支持自定义功能您可以使用util将数学表达式解析为反向波兰表示法或对其求值。例如,当解析1+2*3 ,您将获得...

    c++数学表达式计算

    c++ 实现数学表达式计算 支持 常见的数学函数。如sin cos sqrt abs ... 支持 大多数运算符。 使用良好的设计模式,易于维护和拓展。

Global site tag (gtag.js) - Google Analytics