zoukankan      html  css  js  c++  java
  • 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文档,有错误的地方欢迎指正,有问题欢迎留言。

  • 相关阅读:
    类加载器的双亲委派机制
    类加载器
    Linux的cut命令
    Nacos服务发现简单应用
    Nacos当注册中心
    通过pscp命令从Windows向Linux传输大文件
    docker-compose安装nacos集群
    转一篇用分布式解决ERP问题
    转一篇云计算/大数据的通俗文章
    csdn上讲一个实时计算架构比较清晰的一篇文章
  • 原文地址:https://www.cnblogs.com/zero-zyq/p/5810550.html
Copyright © 2011-2022 走看看