好用的Java数学表达式计算工具——Exp4j

简介:

Exp4j是一个简单易用的开源Java数学表达式计算工具,由德国Java开源爱好者Frank发起并持续进行维护,旨在提供对数学表达式的计算功能。

实际使用一下:

 
  1. package org.demo.exp4j; 
  2.  
  3. import de.congrace.exp4j.Calculable; 
  4. import de.congrace.exp4j.ExpressionBuilder; 
  5. import de.congrace.exp4j.UnknownFunctionException; 
  6. import de.congrace.exp4j.UnparsableExpressionException; 
  7.  
  8. /** 
  9.  * Exp4j Demo 
  10.  * @author William Xu 
  11.  */ 
  12. public class Exp4jDemo { 
  13.  
  14.     // 包含变量的数学表达式 
  15.     private final String FUNCTION = "x/y + (x+y)*z"
  16.  
  17.     public Exp4jDemo() { 
  18.  
  19.     } 
  20.  
  21.     public void testFunction() { 
  22.  
  23.         // 构建表达式,并声明变量定义 
  24.         ExpressionBuilder builder = new ExpressionBuilder(FUNCTION) 
  25.                 .withVariableNames("x""y""z"); 
  26.          
  27.         // 以下两种方式也可以声明变量,并直接给变量进行赋值 
  28.         /*ExpressionBuilder.withVariable(String var,double value) 
  29.         ExpressionBuilder.withVariables(Map<String,Double> variables)*/ 
  30.          
  31.         try { 
  32.              
  33.             // 生成计算对象 
  34.             Calculable calc = builder.build(); 
  35.  
  36.             // 设置变量的值 
  37.             calc.setVariable("x"5); 
  38.             calc.setVariable("y"3); 
  39.             calc.setVariable("z"4); 
  40.  
  41.             // 计算结果 
  42.             System.out.println(calc.calculate()); 
  43.  
  44.         } catch (UnknownFunctionException e) { 
  45.             e.printStackTrace(); 
  46.         } catch (UnparsableExpressionException e) { 
  47.             e.printStackTrace(); 
  48.         } 
  49.     } 
  50.  
  51.  
  52.     public static void main(String[] args) { 
  53.  
  54.         Exp4jDemo exp4jDemo = new Exp4jDemo(); 
  55.          
  56.         exp4jDemo.testFunction(); 
  57.  
  58.  
  59.     } 

Exp4j所支持的运算符包括:

  • 加法:“2 + 2
  • 减法:“2 - 2”
  • 乘法:“2 * 2
  • 除法:“2 / 2
  • 取模:“2 % 2”
  • 正负号:“+2 - (-2)”
  • 幂:“2 ^ 2”
内建函数包括:
  • abs: absolute value
  • acos: arc cosine
  • asin: arc sine
  • atan: arc tangent
  • cbrt: cubic root
  • ceil: nearest upper integer
  • cos: cosine
  • cosh: hyperbolic cosine
  • exp: euler's number raised to the power (e^x)
  • floor: nearest lower integer
  • log: logarithmus naturalis (base e)
  • sin: sine
  • sinh: hyperbolic sine
  • sqrt: square root
  • tan: tangent
  • tanh: hyperbolic tangent



本文转自william_xu 51CTO博客,原文链接:http://blog.51cto.com/williamx/1065823,如需转载请自行联系原作者

 

 

相关文章
|
1月前
|
人工智能 监控 Java
Java与AI智能体:构建自主决策与工具调用的智能系统
随着AI智能体技术的快速发展,构建能够自主理解任务、制定计划并执行复杂操作的智能系统已成为新的技术前沿。本文深入探讨如何在Java生态中构建具备工具调用、记忆管理和自主决策能力的AI智能体系统。我们将完整展示从智能体架构设计、工具生态系统、记忆机制到多智能体协作的全流程,为Java开发者提供构建下一代自主智能系统的完整技术方案。
360 4
|
2月前
|
人工智能 Java API
Java AI智能体实战:使用LangChain4j构建能使用工具的AI助手
随着AI技术的发展,AI智能体(Agent)能够通过使用工具来执行复杂任务,从而大幅扩展其能力边界。本文介绍如何在Java中使用LangChain4j框架构建一个能够使用外部工具的AI智能体。我们将通过一个具体示例——一个能获取天气信息和执行数学计算的AI助手,详细讲解如何定义工具、创建智能体并处理执行流程。本文包含完整的代码示例和架构说明,帮助Java开发者快速上手AI智能体的开发。
947 8
|
2月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
865 1
|
3月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
3月前
|
安全 Java API
Java中的Lambda表达式:简洁与功能的结合
Java中的Lambda表达式:简洁与功能的结合
425 211
|
3月前
|
安全 Java
Java中的Switch表达式:更简洁的多路分支
Java中的Switch表达式:更简洁的多路分支
476 211
|
3月前
|
机器学习/深度学习 Java 编译器
解锁硬件潜能:Java向量化计算,性能飙升W倍!
编译优化中的机器相关优化主要包括指令选择、寄存器分配、窥孔优化等,发生在编译后端,需考虑目标平台的指令集、寄存器、SIMD支持等硬件特性。向量化计算利用SIMD技术,实现数据级并行,大幅提升性能,尤其适用于图像处理、机器学习等领域。Java通过自动向量化和显式向量API(JDK 22标准)支持该技术。
165 4
|
Java 网络安全 数据安全/隐私保护
[Java工具] 邮件发送工具
注册邮箱 去163邮箱(或其他邮箱)注册一个邮箱,并开启SMTP授权码。 程序 需要注意的是,由于阿里云服务器不让使用默认的25端口,所以会出现Windows下测试发送邮件成功,Linux服务器下发送邮件却出错的问题(broke pipe、timeout、can not connect等)。
1866 0