32.仿简道云公式函数实战-数学函数-MOD

news2024/11/22 22:18:14

1. MOD函数

返回两数相除的余数。 结果的符号与除数相同。

2. 函数用法

MOD(number, divisor)

3. 函数示例

返回两数相除的余数。 结果的符号与除数相同。

number: 必需。 要计算余数的被除数。

divisor: 必需。 除数。

4. 代码实战

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

package com.ql.util.express.self.combat.function.math;

import com.ql.util.express.Operator;
import com.ql.util.express.OperatorOfNumber;
import com.ql.util.express.self.combat.exception.FormulaException;

import java.math.BigDecimal;

/**
 * 类描述: MOD函数
 *
 * @author admin
 * @version 1.0.0
 * @date 2023/11/24 8:56
 */
public class ModFunction extends Operator {

    public ModFunction(String name) {
        this.name = name;
    }

    @Override
    public Object executeInner(Object[] lists) throws Exception {


        if (lists.length == 0 || lists.length > 2) {
            throw new FormulaException("操作数异常");
        }

        Object o1 = lists[0];
        Object o2 = lists[1];

        if (o1 instanceof BigDecimal) {
            BigDecimal dividend = new BigDecimal(o1.toString());

            BigDecimal divisor = new BigDecimal(o2.toString());

            BigDecimal remainder = dividend.remainder(divisor);

            return remainder;
        } else {
            return OperatorOfNumber.modulo(o1, o2);
        }
    }
}

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

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);
    }

    @Override
    public 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"));

        // COT函数
        this.addFunction("COT",new CotFunction("COT"));

        // COUNT函数
        this.addFunction("COUNT",new CountFunction("COUNT"));

        // COUNTIF函数
        this.addFunction("COUNTIF",new CountIfFunction("COUNTIF"));

        // FIXED函数
        this.addFunction("FIXED",new FixedFunction("FIXED"));

        // FLOOR函数
        this.addFunction("FLOOR",new FloorFunction("FLOOR"));

        // INT函数
        this.addFunction("INT",new IntFunction("INT"));

        // LARGE函数
        this.addFunction("LARGE",new LargeFunction("LARGE"));

        // LOG函数
        this.addFunction("LOG",new LogFunction("LOG"));

        // MAX函数
        this.addFunction("MAX",new MaxFunction("MAX"));

        // MIN函数
        this.addFunction("MIN",new MinFunction("MIN"));

        // MOD函数
        this.addFunction("MOD",new ModFunction("MOD"));

    }
}

创建测试用例

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 {

    @Test
    public void MOD() throws Exception{

        FormulaRunner formulaRunner = new FormulaRunner(true,true);
        // 创建上下文
        DefaultContext<String, Object> context = new DefaultContext<>();
        String express = "MOD(9,3)";
        Object object = formulaRunner.execute(express, context, null, true, true);
        System.out.println(object);
    }

}

运行结果

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

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

相关文章

书生·浦语大模型实战营-第一课笔记

首先了解了大模型的发展历程&#xff0c;从GPT1到GPT4的发展历程&#xff0c;大模型经历自OPENAI发布GPT3.5后进入了快速发展阶段&#xff0c;成为了技术界高度关注的热门技术。 大模型的出现改变了以往通用人工智能的困局&#xff0c;使得通用人工智能在通用领域的应用变得有可…

QT3作业

1 2. 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff0c;将登录按钮使用t5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#…

模板初阶C++

1、泛型编程 如何实现一个通用的交换函数呢? void Swap(int& left, int& right) {int temp = left;left = right;right = temp; }void Swap(double& left, double& right) {double temp = left;left = right;right = temp; }void Swap(char& left, char&…

五种多目标优化算法(MOJS、MOGWO、NSWOA、MOPSO、NSGA2)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOJS 1.2MOGWO 1.3NSWOA 1.4MOPSO 1.5NSGA2 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…

LeetCode.105. 从前序与中序遍历序列构造二叉树

题目 105. 从前序与中序遍历序列构造二叉树 分析 这道题是告诉我们一颗二叉树的前序和中序&#xff0c;让我们根据前序和中序构造出整颗二叉树。 拿到这道题&#xff0c;我们首先要知道前序的中序又怎样的性质&#xff1a; 前序&#xff1a;【根 左 右】中序&#xff1a;…

VMWare ubuntu共享宿主机window11文件夹

宿主机window的设置 找到需要共享的文件夹&#xff0c;比如我需要share文件夹共享到虚拟机中 点击“共享”文件夹属性&#xff0c;如果找不到“共享”选项卡&#xff0c;需要在下面的“选项”中 注意勾选“使用共享向导&#xff08;推荐&#xff09;”&#xff0c;如果已经勾…

QT中的多线程有什么作用?

概述 在学习QT线程的时候我们首先要知道的是QT的主线程&#xff0c;也叫GUI线程&#xff0c;意如其名&#xff0c;也就是我们程序的最主要的一个线程&#xff0c;主要负责初始化界面并监听事件循环&#xff0c;并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上…

嵌入式Linux学习day22

时间接口&#xff1a; 头文件&#xff1a;#include<time> 1.time&#xff08;&a&#xff09; 用time_t 定义a 功能&#xff1a;返回1970-1-1到现在的秒数 参数&#xff1a;存放秒数空间的首地址 2.localtime(&a) 功能&#xff1a;将秒数转化为本地时间 参…

[C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强

【算法介绍】 提升夜间雾霾图像可见度的技术研究&#xff1a;引导APSF与梯度自适应卷积的应用 随着城市化的快速发展&#xff0c;雾霾现象日益严重&#xff0c;尤其是在夜间&#xff0c;雾霾对图像的可见度造成了极大的影响。因此&#xff0c;提升夜间雾霾图像的可见度成为了…

C#,洗牌问题(Card Shuffle Problem)的算法与源代码

1 洗牌问题&#xff08;Card Shuffle Problem&#xff09; 洗牌问题&#xff08;Card Shuffle Problem&#xff09;的基本描述 你有 100 张牌&#xff0c;从 1 到 100。 你把它们分成 k 堆&#xff0c;然后按顺序收集回来。 例如&#xff0c;如果您将它们分成 4 堆&#xff0…

Android T 远程动画显示流程其二——动画的添加流程(更新中)

前言 接着上篇文章分析 Android T 远程动画显示流程其一 切入点——处理应用的显示过渡 下面&#xff0c;我们以从桌面点击一个应用启动的场景来分析远程动画的流程&#xff0c;窗口添加的流程见Android T WMS窗口相关流程 这里我们从AppTransitionController.handleAppTran…

Latent Diffusion Models / Stable Diffusion(LDM)

High-Resolution Image Synthesis with Latent Diffusion Models&#xff08;CVPR 2022&#xff09;https://arxiv.org/abs/2112.10752latent-diffusionstable-diffusion cross-attention&#xff08;用于多模态任务&#xff09; Cross-attention vs Self-attention&#xff…

外汇天眼:交易讲究时机,不要在这几个时间交易

每个交易者都想知道&#xff0c;什么时候是入场买卖的最好时机。 到底是1.1800入场呢&#xff1f; 还是等到1.1900&#xff1f; 但是&#xff0c;交易中不仅仅是关于从哪里入场&#xff0c;同样的&#xff0c;知道什么时候不去交易也是非常重要的。 这听起来像是一回事&#x…

python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

网络原理 - HTTP/HTTPS(4)

HTTP响应详解 认识"状态码"(status code) 状态码表示访问一个页面的结果.(是访问成功,还是失败,还是其它的一些情况...).(响应结果如何) 学习状态码 -> 为了调试问题. 写服务器时,按照状态码的含义正确使用. 200 OK 这是最常见的状态码,表示访问成功. 抓包抓…

超详细!三款内衣洗衣机PK评测,希亦、觉飞、由利谁更胜一筹?

内衣裤作为我们日常必备的贴身衣物&#xff0c;所以对卫生方面的要求也比较高&#xff0c;但对许多人们而言&#xff0c;对内衣裤进行清洗是一项相当繁琐的事情&#xff0c;主要是因为并不能直接把内衣裤放入大型洗衣机里和其它衣服混合洗&#xff0c;所以大多数用户都会自己动…

不止于框架:全面深入Spring MVC,成就开发高手

介绍&#xff1a;Spring MVC是一个基于Java的轻量级Web框架&#xff0c;它实现了MVC&#xff08;Model-View-Controller&#xff09;设计模式。以下是对Spring MVC的详细介绍&#xff1a; MVC架构模式&#xff1a;Spring MVC遵循MVC架构模式的思想&#xff0c;将应用程序分为模…

几个常见的C/C++语言冷知识

当涉及到C/C语言时&#xff0c;有一些冷知识可能并不为人所熟知&#xff0c;但却可以让你更深入地理解这门古老而强大的编程语言。以下是一些有趣的C/C语言冷知识。 1. 数组的下标可以是负数 在我们日常的C语言编程中&#xff0c;数组是一个非常常见的数据结构。我们习惯性地使…

CSS 函数详解url、min、rgb、blur、scale、rotate、translate等

随着技术的不断进步&#xff0c;CSS 已经从简单的样式表发展成为拥有众多内置函数的强大工具。这些函数不仅增强了开发者的设计能力&#xff0c;还使得样式应用更加动态、灵活和响应式。本文将深入探讨 CSS 常见的 66 个函数&#xff0c;逐一剖析它们的功能和用法&#xff0c;一…

Linux目录:scp命令

目录 1 scp命令1.1简介1.2命令说明1.3 实例1、从本地复制的远程2、从远程复制到本地3、-r&#xff1a;复制目录4、 -p&#xff1a;保留原文件的修改时间&#xff0c;访问时间5、-P&#xff1a;指定传输数据的端口6、扩展&#xff1a;修改ssh默认端口 1 scp命令 1.1简介 scp 是…