工做中遇到一个简单的小问题,判断两个数是否整除,若是不整除,获取相关的余数。java
习惯java的我坚决果断的写下了代码ide
public Boolean isDivisibility(Integer dividend,Integer divider) { return dividend % divider == 0; }
提交代码发现居然提交不上??spa
后来查看API发现apex中没有直接的%取余运算,因此若是想要取余以及判断是否整除须要其余方式,代码以下:code
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; } }
调用结果显示:blog
经过上述代码能够看出,咱们运算的主要方式为将被除数转换成Decimal类型,除以除数获得Decimal类型的余数,经过取舍规则获取他的上限值和下限值,若是上限和下限相等,则整除,不然不整除。ci
这里咱们主要用到的是取舍模式。System.RoundingMode包含如下经常使用的取值:文档
UP:简单的说,UP是对decimal值进行绝对值向上取,符号不变化。get
1. 5.5经过RoundingMode.UP操做之后变成了6;it
2. -1.5经过RoundingMode.UP操做之后变成了-2;class
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文档,有错误的地方欢迎指正,有问题欢迎留言。