java 除法运算只保留整数位的3种方式
1.情景展示
根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推...
2.情况分析
可以使用3个函数实现
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。Math.floor(num) 只保留整数位
Math.rint(num) 余数四舍五入
Math.ceil(num) 取整位,再+1
举例:
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类型的数字,所以,还需要强转成整数。
这次是正确答案!
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
3.解决方案
// 还差多长时间执行,单位:毫秒数 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 + "!");
4.问题扩展
这样写,有一个问题,如果你的项目使用了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 = "秒"; }
使用上述代码进行替换,就不会报严重错误了!
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:

更多精彩