工作中遇到一個簡單的小問題,判斷兩個數是否整除,如果不整除,獲取相關的余數。
習慣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文檔,有錯誤的地方歡迎指正,有問題歡迎留言。