salesforce 零基础学习(四十三)运算取余

工作中遇到一个简单的小问题,判断两个数是否整除,如果不整除,获取相关的余数。

习惯java的我毫不犹豫的写下了代码

public Boolean isDivisibility(Integer dividend,Integer divider) {
    return dividend % divider == 0;
}

提交代码发现竟然提交不上??

后来查看API发现apex中没有直接的%取余运算,所以如果想要取余以及判断是否整除需要其他方式,代码如下:

public without sharing class MathHelper {

    /*
        是否整除
        @param dividend 被除数
        @param divider  除数
        @return 整除返回true,不整除返回false
    */
    public static Boolean isDivisibility(Integer dividend,Integer divider) {
        //先将被除数转换成Decimal,否则先计算整数除法结果为Integer类型,然后将整数转换成Decimal
        Decimal resultDecimal = Decimal.valueOf(dividend) / divider;
        //获取结果上线
        Integer resultSeiling = Integer.valueOf(resultDecimal.round(System.RoundingMode.CEILING));
        Integer resultDown = Integer.valueOf(resultDecimal.round(System.RoundingMode.DOWN));

        return resultSeiling == resultDown;
    }

    /*
        获取余数
        @param dividend 被除数
        @param divider  除数
        @return 返回余数
    */
    public static Integer getRemainder(Integer dividend,Integer divider) {
        Decimal resultDecimal = Decimal.valueOf(dividend) / divider;
        Integer resultDown = Integer.valueOf(resultDecimal.round(System.RoundingMode.DOWN));
        return dividend - resultDown * divider;
    }
}

调用结果显示:

通过上述代码可以看出,我们运算的主要方式为将被除数转换成Decimal类型,除以除数得到Decimal类型的余数,通过取舍规则获取他的上限值和下限值,如果上限和下限相等,则整除,否则不整除。

这里我们主要用到的是取舍模式。System.RoundingMode包含以下常用的取值:

UP:简单的说,UP是对decimal值进行绝对值向上取,符号不变化。

1.    5.5通过RoundingMode.UP操作以后变成了6;

2.    -1.5通过RoundingMode.UP操作以后变成了-2;

DOWN:简单的说,DOWN是对decimal值进行绝对值向下取,符号不变化。

1.    5.5通过RoundingMode.DOWN操作以后变成了5;

2.    -1.5通过RoundingMode.DOWN操作以后变成了-1;

CELLING:对于正数,CELLING操作和UP操作相同,对于负数,操作和DOWN操作相同。

1.    5.5通过RoundingMode.CELLING操作以后变成了6;

2.    -1.5通过RoundingMode.CELLING操作以后变成了-1;

FLOOR:对于正数,FLOOR操作和DOWN操作相同,对于负数,操作和UP操作相同。

1.    5.5通过RoundingMode.FLOOR操作以后变成了5;

2.    -1.5通过RoundingMode.FLOOR操作以后变成了-2;

HALF_UP:小数点部分大于等于0.5,绝对值向上取,符号跟随。

  1.    5.5通过RoundingMode.FLOOR操作以后变成了6;

2.    5.1通过RoundingMode.FLOOR操作以后变成了5,因为0.1<0.5;

3.    -1.5通过RoundingMode.FLOOR操作以后变成了-2;

4.    -1.1通过RoundingMode.FLOOR操作以后变成了-1;

HALF_DOWN:小数点部分大于0.5,绝对值向上取,符号跟随。

1.    5.5通过RoundingMode.FLOOR操作以后变成了5;

2.    5.7通过RoundingMode.FLOOR操作以后变成了6,因为0.7>0.5;

3.    -1.5通过RoundingMode.FLOOR操作以后变成了-1;

4.    -1.7通过RoundingMode.FLOOR操作以后变成了-2;

总结:本篇主要描述两个整数是否整除并且获取余数的方法以及取舍模式的几个值得概念以及定义,详情了解请自行查看官方API文档,有错误的地方欢迎指正,有问题欢迎留言。

时间: 2024-10-07 18:23:37

salesforce 零基础学习(四十三)运算取余的相关文章

salesforce 零基础学习(五十二)Trigger使用篇(二)

第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. 十七篇链接:salesforce 零基础学习(十七)Trigger用法 有的时候对于sObject的trigger处理复杂的情况下,比如一个sObject的before update要实现功能1,2.....n功能情况下,Handler中需要在before update写实现功能1--n的代码.然而

salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随便的取一个审批人了,有以下方式针对不同的场景可以获取到当前记录的最终审批人以及审批意见. 邮件内容使用以下几种方式实现: 1.代码里面实现邮件发送 2.email template(text/html/custom) 3.visualforce emailTemplate 对发送邮件方式不清楚的,可

salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的使用此标签进行解析附件内容,后台只要声明String类型变量用来存储附件名称,Blob类型变量用来存储附件的内容即可. 但是当我们的项目整体使用第三方的前端框架,例如VUE或者angular等前端框架时,有时使用apex:inputFile反而不是很方便,需要用到html的原生的附件上传的标签<inpu

salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-from.html 群里面有个小伙伴问了一个关于两个有Dependence关系的Picklist字段如何在Apex中通过control字段的值获取到Dependence字段的值,针对Salesforce配置来说,我们很好配置出两个Dependence字段的关系,通过点击设置一下include关系即可.如

salesforce 零基础学习(四十一)Group

salesforce中,有的时候我们需要将一组用户放进一个Group,用来实现以下主要功能: 1.通过sharing rule设置默认的共享访问; 2.将记录分享给其他用户; 3.指定同步的联系人,这些联系人的onwer属于其他user; 4.分配Group中用户到指定的动作,比如审批流程等. Group作为系统表,其字段信息如下所示: 其中Type作为PickList字段,他的取值可以通过Schema方式取出. public with sharing class GroupPickList {

salesforce 零基础学习(二十三)数据记录导出至excel(自定义报表导出)

我们都知道,报表有个功能为导出excel,但是有的时候客户需求往往标准的报表达不到,比如导出excel,其中本月修改的数据字段标红,如下图所示. 这就需要我们去写VF来实现此功能. 需求:将数据表记录导出成excel,其中excel内容需要本月修改的数据字段自动标红显示. 表:Goods__c,字段如下: 设计思路:如果导出excel并且需要跟踪每个字段的修改时间进行校验是否标红,则需要有一个表取跟踪这个表.有两种方式进行Track. 1.salesforce中提供了Track History功

salesforce 零基础学习(五十三)多个文件生成一个zip文件(使用git上封装的代码)

此篇参考git代码:https://github.com/pdalcol/Zippex 学习salesforce可以访问一个朋友的网站:https://www.xgeek.net 首先感谢git上提供代码的大神,学到了新的知识.salesforce不像java提供生成Zip文件的类库,通过git上copy的代码可以实现此功能,具体的使用方法以及API可以查看上方git链接. 概述:实例模拟三个上传组件,加上一个下载Zip包按钮,本地选择需要上传的文件,点击按钮后便会下载成一个压缩文件,压缩文件中

salesforce零基础学习(八十四)配置篇: 自定义你的home page layout

当我们进入salesforce系统或者切换app后,默认第一个看到的就是home页面.home页面简单的来说可以包括左侧(narrow component)和右侧(wide component)两部分. 左侧包含Recent View,Custom Link,Create New等快捷入口等组件,右侧包括tasks,item to approval,calendar,dashboard snapshot等等. 有时,不同简档的用户需要看到不同的Home页面中的组件或者显示不同的custom li

salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce

本篇参考Trail教程: https://developer.salesforce.com/trailhead/force_com_dev_intermediate/apex_integration_services/apex_integration_rest_callouts 有的时候我们需要在salesforce中引入外部的方法或者数据,这样就需要访问外部的Services,目前常用的访问方式有两种: 1.SOAP方式:Web Service通过XML方式调用SOAP Web服务器; 2.R