`
h248980496
  • 浏览: 7276 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java公式计算

阅读更多
网上看到很多自己编写的公式计算的类,写了很累,但是功能始终不尽如人意,尝试了一下beanshell的计算功能,发现效果异常的好,下面代码需要引用bsh-2.0的jar包,代码如下,可以看main函数的调用,对double和float的精度也控制的非常好

bsh-2.0b4.jar http://ishare.iask.sina.com.cn/f/21558323.html?from=like



import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import bsh.EvalError;
import bsh.Interpreter;

/**
 * 
 * desc: 基于表达式的参数运算工具类
 * 
 * @author <a href="mailto:yourmail">Hegege</a>
 * @version CVS $Revision: 1.1 $ $Date: 2005/12/05 08:42:21 $
 */
public class CalculateExpressionUtil {

	/**
	 * 例:
	 * @param expression = 3*abcd-2*abc
	 * @param paramsList list(Map m)
	 * @param m1 ("key","abc"),("value",1.5f)
	 * @param m2 ("key","abcd"),("value",0.5f)
	 * @return -1.5
	 */
	public static Float calculate(String expression,List paramsList){
		//FIXME 
		/*理论上说应该形参是一个map,然后解析器自动根据解析器取得计算参数列表
		 *然后map对应计算参数列表赋值
		 *但是没找到取得计算参数列表的对应接口或方法,现在形参是一个list
		 *里面放了map,每个map有两个集,第一个是key,第二个是value
		 *接口计算使用了float,避免了double的计算精度问题
		*/
		Float rs = 0f;
		Interpreter interpreter =  new Interpreter();
		
		try {
			if(paramsList!=null&&!paramsList.isEmpty()){
				for(int i=0;i<paramsList.size();i++){
					Map m = (Map) paramsList.get(i);
					String key = (String) m.get("key");
					Float value = (Float) m.get("value");
					interpreter.set(key, value);
				}
			}
			interpreter.eval("result = "+expression);
			System.out.println("****** result = "+interpreter.get("result")+" ********");
			rs = (Float) interpreter.get("result");
		} catch (EvalError e) {
			e.printStackTrace();
			return null;
		}
		return rs;
	}
	
	public static void main(String[] args) {
		List paramsList = new ArrayList();
		Map m1 = new HashMap();
		m1.put("key", "abc");
		m1.put("value", new Float(1.5f));
		paramsList.add(m1);
		Map m2 = new HashMap();
		m2.put("key", "abcd");
		m2.put("value", new Float(0.5f));
		paramsList.add(m2);
		System.out.println(calculate("abcd*abc+3*abcd-2*abc", paramsList));
	}
}
分享到:
评论

相关推荐

    java 公式计算汇总,直接调用其方法即可进行运算

    在Java编程语言中,公式计算是一项常见的需求,特别是在科学计算、数据分析、数学建模等领域。为了简化这方面的代码编写,开发者经常会将各种计算操作封装成方法,以便在项目中直接调用。标题“java 公式计算汇总,...

    Java表达式计算引擎:Expr4J

    一个开源的Java表达式计算引擎 Java代码 /** * java 表达式计算引擎 * @author Michael sun */ public class TestExpr4j { /** * @param args */ public static void main(String[] args) { ...

    eval-0.5.jar,java端公式计算

    java端简单公司的计算

    JEPsrc(自定义计算公式)

    JEP是Java expression parser的简称,即java表达式分析器,Jep是一个用来转换和计算数学表达式的java库。通过这个程序包,用户可以以字符串的形式输入一个、任意的公式,然后快速地计算出结果。Jep支持用户自定义...

    BeanShell java 表达式运算框架

    BeanShell java 表达式运算框架,及其方便快捷(附jar包,工具类,测试类)

    java 公式解析源码

    总的来说,Java公式解析源码是实现动态计算和自定义逻辑的关键工具,其核心在于理解和处理数学表达式的语法和语义。通过理解并使用这些源码,开发者可以构建出能够灵活处理各种计算场景的应用。

    JAVA数学计算包

    《JAVA数学计算包:Apache Commons Math3库的深度解析》 在Java编程环境中,进行复杂的数学计算和统计分析是一项常见的任务。Apache Commons Math3库,作为JAVA数学计算包,为开发者提供了强大的工具,使得在Java中...

    java解析数学公式

    这个是我自己开发的用java编写的解析简单数学公式的jar, 资源下载积分有点贵,但很值得。 解析的公式可以为:+,-,*,/,max() min(),以及带()的 公式例如: 344+(344-(34+3434)/90)*45 344.34*2+343.34/3 max...

    字符串计算公式计算

    在Java编程中,将字符串表示的计算公式转化为可执行的表达式并计算其结果是一项常见的需求。这通常涉及到解析字符串,构建表达式树,然后进行求值。在本篇文章中,我们将深入探讨如何实现这个功能。 首先,我们需要...

    JAVA计算微积分源代码

    某天,突发奇想,有没有计算微积分的程序 找了半天,发现一些如 matlab 、《计算工厂》等软件, 就是没找到,能够以字符串形式输入表示式 并且能够方便JAVA调用的程序 于是花了3天做了一个

    Java数值计算算法源代码

    本资源"Java数值计算算法源代码"涵盖了复数运算、矩阵操作、线性方程组求解、非线性方程求解、插值法以及数值积分等多个关键领域,对于学习和实践Java数值计算具有很高的价值。 1. **复数运算**:复数是数学中的一...

    java把字符串转化成公式计算的示例

    下面我们将详细探讨如何在Java中实现字符串到公式计算的转换。 首先,Java标准库并没有内置直接处理这种需求的类,但是可以通过引入外部库或者使用Java Scripting API来实现。Java Scripting API是Java平台标准版...

    公式計算Framework(Jeval)1

    Jeval是一款轻量级的Java公式计算框架,它允许开发者在Java应用程序中方便地执行数学表达式。Jeval的主要功能是解析和计算包含各种数学函数(如PI, pow, sin, cos, acos等)的公式,这对于需要动态计算或者依赖特定...

    java实现复合辛普森求积公式

    本程序使用java实现复合辛普森求积公式,使用者可自行修改求积函数

    java解析公式 eval.jar

    这些函数可以增强公式计算的复杂性。 4. **变量绑定**:在解析公式时,可以将程序中的变量绑定到公式中,使得公式能够引用程序状态。这对于基于当前数据进行计算非常方便。 5. **安全性和错误处理**:在使用`eval....

    java 请假天数计算工具类

    Java 请假天数计算工具类是企业信息化管理中常见的需求,尤其在OA(办公自动化)系统中,用于准确计算员工的假期天数。这个工具类的设计通常涉及到日期处理、工作日计算以及根据公司规则进行调整等多个方面。在这个...

    Java生成excel表格设置公式并填充数据

    Java编程调用PageOffice实现从空白的excel文件动态生成excel表格,设置公式并填充数据。 集成PageOffice不但能够实现在线编辑、保存真正的Office文档,而且还可以轻松实现Word、Excel文档的动态数据填充、格式控制和...

    diffusive:Java分布式计算框架

    Diffusive 是一个基于 Java 的框架,它提供了通过用 @Diffusive 标记来分发任何 Java 方法的执行的能力。 该方法被分发到计算资源网络。 负责执行或进一步分发该方法的资源称为扩散器。 与基于 Actor 的框架类似,...

    java24点判断and字符串公式计算

    压缩包里有两个类,一个用于字符串公式计算,另一个可以用于24点判断。 例如: System.out.println(szys(strCast("3-4*-5+5")));//输出28.0 24点判断,键盘输入4个1~13间的整数,判断是否能组成24点,并输出计算公式

    Jep3.5 数学公式计算 jar包及中文操作手册文档

    12 解析和计算 121 解析 122 计算 二、基本用法 21 入门指南 22 错误处理 23 默认设置 24 计算方法 25 快速重复计算 26 Decimal 运算 27 隐式乘法 28 处理多个表达式 29 使用 RealEvaluator 快速计算 三、变量 31 ...

Global site tag (gtag.js) - Google Analytics