21.仿简道云公式函数实战-数学函数-COS

1. COS函数

COS 函数可用于计算角度的余弦值,返回 -1 到 1 之间的数值。

2. 函数用法

COS(弧度)

3. 函数示例

如计算 COS(60°) 的值,可设置公式为COS(RADIANS(60)),返回 0.5。

4. 代码实战

首先我们在function包下创建math包,在math包下创建CosFunction类,代码如下:

package com.ql.util.express.self.combat.function.math;import com.ql.util.express.Operator;
import com.ql.util.express.self.combat.exception.FormulaException;/*** 类描述: COS函数** @author admin* @version 1.0.0* @date 2023/11/23 9:38*/
public class CosFunction extends Operator {public CosFunction(String name) {this.name = name;}@Overridepublic Object executeInner(Object[] objects) throws Exception {// 参数校验if (objects.length == 0) {throw new FormulaException("操作数异常");}double hudu = Double.parseDouble(objects[0].toString());Object result = Math.cos(hudu);return result;}
}

把CosFunction类注册到公式函数入口类中,代码如下:

package com.ql.util.express.self.combat.ext;import com.ql.util.express.ExpressRunner;
import com.ql.util.express.IExpressResourceLoader;
import com.ql.util.express.parse.NodeTypeManager;
import com.ql.util.express.self.combat.function.logic.*;
import com.ql.util.express.self.combat.function.math.*;/*** 类描述: 仿简道云公式函数实战入口类** @author admin* @version 1.0.0* @date 2023/11/21 15:29*/
public class FormulaRunner extends ExpressRunner {public FormulaRunner() {super();}public FormulaRunner(boolean isPrecise, boolean isTrace) {super(isPrecise,isTrace);}public FormulaRunner(boolean isPrecise, boolean isStrace, NodeTypeManager nodeTypeManager) {super(isPrecise,isStrace,nodeTypeManager);}public FormulaRunner(boolean isPrecise, boolean isTrace, IExpressResourceLoader iExpressResourceLoader, NodeTypeManager nodeTypeManager) {super(isPrecise,isTrace,iExpressResourceLoader,nodeTypeManager);}@Overridepublic void addSystemFunctions() {// ExpressRunner 的内部系统函数super.addSystemFunctions();// 扩展公式函数this.customFunction();}/**** 自定义公式函数*/public void customFunction() {// 逻辑公式函数this.addLogicFunction();// 数学公式函数this.addMathFunction();}public void addLogicFunction() {// AND函数this.addFunction("AND",new AndFunction("AND"));// IF函数this.addFunction("IF",new IfFunction("IF"));// IFS函数this.addFunction("IFS",new IfsFunction("IFS"));// XOR函数this.addFunction("XOR",new XorFunction("XOR"));// TRUE函数this.addFunction("TRUE",new TrueFunction("TRUE"));// FALSE函数this.addFunction("FALSE",new FalseFunction("FALSE"));// NOT函数this.addFunction("NOT",new NotFunction("NOT"));// OR函数this.addFunction("OR",new OrFunction("OR"));}public void addMathFunction() {// ABS函数this.addFunction("ABS",new AbsFunction("ABS"));// AVERAGE函数this.addFunction("AVERAGE",new AvgFunction("AVERAGE"));// CEILING函数this.addFunction("CEILING",new CeilingFunction("CEILING"));// RADIANS函数this.addFunction("RADIANS",new RadiansFunction("RADIANS"));// COS函数this.addFunction("COS",new CosFunction("COS"));}
}

创建测试用例

package com.ql.util.express.self.combat;import com.ql.util.express.DefaultContext;
import com.ql.util.express.self.combat.ext.FormulaRunner;
import org.junit.Test;/*** 类描述: 实战测试类** @author admin* @version 1.0.0* @date 2023/11/21 15:45*/
public class CombatTest {@Testpublic void COS() throws Exception{FormulaRunner formulaRunner = new FormulaRunner(true,true);// 创建上下文DefaultContext<String, Object> context = new DefaultContext<>();String express = "COS(RADIANS(a))";context.put("a",60.0);Object object = formulaRunner.execute(express, context, null, true, true);System.out.println(object);}}

运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

被他人错误解析域名到雷池 WAF网关的处理办法

作者&#xff1a;田逸 最近一些项目的站点经常发告警短信&#xff0c;提示网站无法访问。通过排查&#xff0c;发现后端数据库资源都被耗尽&#xff08;连接数上千&#xff0c;正常情况是小于100&#xff09;&#xff0c;负载也高得吓人&#xff0c;如下图所示。 “load averag…

Spring-IOC-xml方式

简介 **控制反转**&#xff08;Inversion of Control&#xff0c;缩写为**IoC**&#xff09;&#xff0c;是[面向对象编程]中的一种设计原则&#xff0c;可以用来减低计算机[代码]之间的[耦合度]。其中最常见的方式叫做[依赖注入]Dependency Injection&#xff0c;简称DI&#…

照着这几步做,轻松搭建企业知识库

在当今信息爆炸的时代&#xff0c;企业面临着海量的知识和信息。如何高效地管理和利用这些知识成为了企业发展的关键。而搭建一个适合企业的知识库&#xff0c;可以帮助企业更好地组织和共享知识&#xff0c;提高工作效率和竞争力。下面将为大家介绍一些简单的步骤&#xff0c;…

Xshell 从github克隆项目:使用ssh方式。

接上文&#xff1a; https://blog.csdn.net/liu834189447/article/details/135247868 是能克隆项目了&#xff0c;但是速度太磕碜了&#xff0c;磕碜到难以直视。 找到另外一种办法&#xff0c;使用SSH克隆项目 速度嘎嘎猛。 首先得能进得去github网站&#xff0c;不能点上边…

Centos7:Jenkins+gitlab+node项目启动(1)

Centos7&#xff1a;Jenkinsgitlabnode项目启动(1) Centos7&#xff1a;Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启动(2) Centos7&#xff1a;Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7&#xff1a;Jenkinsgitlabnode项目启…

uni-app/vue封装etc车牌照输入,获取键盘按键键值

先看下效果如下&#xff1a; 动态图如下 uniapp的keyup获取不到keyCode和compositionstart&#xff0c;compositionend&#xff0c;所以需要监听input节点的keyup事件&#xff0c; 思路以及代码如下&#xff1a; 1.将每一个字符用文本框输入&#xff0c;代码如下 <view …

centos 配置 git 连接 github

centos 配置 git 连接 github 首先安装 git 创建 ssh key ssh-keygen -t rsa复制公钥 cat ~/.ssh/id_rsa.pub # 打印出公钥内容然后复制配置 github 登录网页 github 账号&#xff1b;进入 setting&#xff1b;点击 SSH and GPG keys&#xff0c;点击 New SSH keytitile 随便填…

TCP的三次握手

TCP 是一种面向连接的单播协议&#xff0c;在发送数据前&#xff0c;通信双方必须在彼此间建立一条连接。所谓的“连接”&#xff0c;其实是客户端和服务器的内存里保存的一份关于对方的信息&#xff0c;如 IP 地址、端口号等。 TCP 可以看成是一种字节流&#xff0c;它…

反序列化漏洞分析

接着昨天的来说&#xff0c;由于fastjson调试起来过程比较复杂&#xff0c;在这里直接看关键点&#xff1a;首先会获取字符串的第一对引号中的内容 如果内容为type就会加载下一对引号中的类 在JavaBeanInfo.class中会获取类中所有详细详细 在这里匹配以set开头的方法 methodNam…

Amazon CodeWhisperer 免费 AI 代码生成助手体验分享

今年上半年&#xff0c;亚马逊云科技正式推出了实时AI编程助手 Amazon CodeWhisperer&#xff0c;还提供了供所有开发人员免费使用的个人版版本。经过一段时间的体验&#xff0c;我觉得 CodeWhisperer 可以处理编程工作中遇到的很多问题&#xff0c;并且帮助开发人员提高编程效…

锁表的时候会一直锁吗

1.前言 当数据库锁定表格时&#xff0c;锁定的持续时间取决于特定情况和具体实现。锁表的持续时间可以是短暂的&#xff0c;也可以是较长的。 在某些情况下&#xff0c;数据库会立即释放对表格的锁定。例如&#xff0c;在事务中&#xff0c;一旦事务完成或回滚&#xff0c;数…

Mybatis-Plus中怎么使用MySQL的内置函数

使用MySQL的内置函数处理数据很方便&#xff0c;但是通过Mybatis-Plus去使用内置函数&#xff0c;而不想通过在xml里面写SQL&#xff0c;那我们应该怎么做呢&#xff1f; 假设我想使用MySQL的FIND_IN_SET函数&#xff1a; import com.baomidou.mybatisplus.core.conditions.qu…

C/C++学习笔记十三 C++中的重载运算符

1、什么是运算符重载&#xff1f; 运算符重载是 C 中的一项功能&#xff0c;使运算符&#xff08;例如 、- 等&#xff09;能够处理用户定义的数据类型。这种机制称为编译时多态性&#xff0c;并提供了为不同数据类型定制运算符行为的优点。 例如&#xff0c;我们可以重载“”运…

【算法题】20. 有效的括号

题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类…

VueRouter的路由模式有哪几种

VueRouter的路由模式有三种&#xff1a;hash模式、history模式和abstract模式。 hash模式&#xff1a;在URL中的路径部分以 # 符号开头。比如&#xff1a;http://www.example.com/#/home。在hash模式下&#xff0c;URL的hash部分的改变不会导致浏览器向服务器发送请求&#xff…

cpp初始化一个结构体

一开始我是直接定义一个结构体指针&#xff0c;给其进行初始化&#xff0c;但是一直报错&#xff0c;最后改为结构体后就好了 结构体定义&#xff1a; struct graph {// Number of edges in the graphint num_edges;// Number of vertices in the graphint num_nodes;// The n…

Maven - expected START_TAG or END_TAG not TEXT (position: TEXT seen …

问题描述 expected START_TAG or END_TAG not TEXT (position: TEXT seen … 原因分析 由于我们复制 pom.xml 过程中&#xff0c;空格的格式不规范&#xff0c;或者格式有问题&#xff0c;maven 会出现加载错误&#xff0c;导致我们的 jar 包也不能正确导入而报红 解决方案 只…

使用Vue3开发学生管理系统模板2 新增学生信息

实现新增学生的功能 第一步&#xff1a;点击新增按钮&#xff0c;弹窗新增学生的页面 function openNew() {student.value {id: "1",student_id: "1",chinese_id: "5222xxx",name: "张三",age: 13,gender: "男",height: …

Flink1.17实战教程(第二篇:DataStream API)

系列文章目录 Flink1.17实战教程&#xff08;第一篇&#xff1a;概念、部署、架构&#xff09; Flink1.17实战教程&#xff08;第二篇&#xff1a;DataStream API&#xff09; Flink1.17实战教程&#xff08;第三篇&#xff1a;时间和窗口&#xff09; Flink1.17实战教程&…

双向循环链表实现C语言关键字中英翻译机 ฅ( ̳• · • ̳ฅ)

目录 1.双向循环链表的声明与定义&#xff1a; 2. 创建链表并对节点中的数据赋初值 3. 插入节点并链接 4.中英翻译 5. 小游戏的实现 6.菜单的实现 7. 释放内存 8.在主函数中用刚才定义的函数实现各种代码 输入样例&#xff1a; 实现方法&#xff1a;双向循环链表来实…