根據提供的毫秒數進行除法運算,若是將毫秒數轉換成小時,小時數不爲0,則只取整數位,依此類推...html
能夠使用3個函數實現java
Math.floor(num) 只保留整數位算法
Math.rint(num) 餘數四捨五入函數
Math.ceil(num) 取整位,再+1工具
舉例:spa
double num = 3.1415926; System.out.println(Math.floor(num));// 3.0 System.out.println(Math.rint(num));// 3.0 System.out.println(Math.ceil(num));// 4.0
網上取整的例子到這就結束啦,都說了只取整數位,返回的是一個double類型的數字,因此,還須要強轉成整數。htm
此次是正確答案!blog
double num = 3.1415926; System.out.println((int)Math.floor(num));// 3 System.out.println((int)Math.rint(num));// 3 System.out.println((int)Math.ceil(num));// 4
2019/05/23 補充:rem
Java整數之間的除法運算,默認只返回整數位,也就至關於Math.floor()函數了。get
方式四:
double num = 3.1415926; // 直接使用int進行強制轉換 System.out.println((int)num);//3 num = 3.789; System.out.println((int)num);//3 // 整數運算,默認將運算結果強制轉換成了整數(只保留整數位) int i4 = 1/10; System.out.println(i4);//0
// 還差多長時間執行,單位:毫秒數 long exeTime = 1234567; // 時間單位 String timeUnit = ""; // 首次執行剩餘時間 int remaTime = 0; if (Math.floor(exeTime/1000/3600) > 0) { remaTime = (int)Math.floor(exeTime/1000/3600); timeUnit = "小時"; } else if (Math.floor(exeTime/1000/60) > 0) { remaTime = (int)Math.floor(exeTime/1000/60); timeUnit = "分鐘"; } else { remaTime = (int)Math.floor(exeTime/1000); timeUnit = "秒"; } System.out.println("啓動定時器...SbptAction...距離任務執行還有" + remaTime + timeUnit + "!");
這樣寫,有一個問題,若是你的項目使用了SonarLint代碼檢測工具,原生的代碼檢測會報錯。
意思是說:這樣的算法很簡單,根本不須要調用取整函數,就能知道結果。屬於嚴重錯誤級別。
如何規避這個錯誤檢測規則?
double hours = exeTime/1000/3600; double minutes = exeTime/1000/60; double seconds = exeTime/1000; if (Math.floor(hours) > 0) { remaTime = (int)Math.floor(hours); timeUnit = "小時"; } else if (Math.floor(minutes) > 0) { remaTime = (int)Math.floor(minutes); timeUnit = "分鐘"; } else { remaTime = (int)Math.floor(seconds); timeUnit = "秒"; }
使用上述代碼進行替換,就不會報嚴重錯誤了!
當我知道Java整數之間的除法運算,默認只返回整數位時,才恍然大悟,上面的校驗規則報錯的緣由:
由於運算結果自己返回只有整數位,雖然結果用double接收的,但其本質仍然是個整數,
因此,就沒有必要調用Math.floor()來只取整數位了,直接強制轉換成int就能夠了!
// Java整數間的除法運算,默認只保留整數位 double hours = exeTime/1000/3600; double minutes = exeTime/1000/60; double seconds = exeTime/1000;
// hours,minutes,seconds的結果只可能爲0.0/1.0/2.0等(即小數位永遠爲0),不可能爲:0.1/1.1/2.1 if (hours > 0) { remaTime = (int)hours; timeUnit = "小時"; } else if (minutes > 0) { remaTime = (int)minutes; timeUnit = "分鐘"; } else { remaTime = (int)seconds; timeUnit = "秒"; }