根据提供的毫秒数进行除法运算,若是将毫秒数转换成小时,小时数不为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 = "秒"; }