java只保留整数_java 除法运算只保留整数位的4种方式
1.情景展示
根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推...
2.情况分析
可以使用3个函数实现
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
2019/05/23 补充:
Java整数之间的除法运算,默认只返回整数位,也就相当于Math.floor()函数了。
方式四:
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
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 = "秒";
}
使用上述代码进行替换,就不会报严重错误了!
5.最佳解决方案
当我知道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 = "秒";
}
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
Java 整数间的除法运算如何保留所有小数位?
个人主页
java只保留整数_java 除法运算只保留整数位的4种方式相关推荐
- java只保留整数_java 除法运算只保留整数位的3种方式
1.情景展示 根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推... 2.情况分析 可以使用3个函数实现 Math.floor(num) 只保留整数位 Ma ...
- java 设置session超时_Java设置session超时(失效)的三种方式
转自:http://blog.csdn.net/hu_shengyang/article/details/8021435 1. 在web容器中设置(此处以tomcat为例) 在tomcat- ...
- java 除法取整_java 除法运算只保留整数位的4种方式
1.情景展示 根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推... 2.情况分析 可以使用3个函数实现 Math.floor(num) 只保留整数位 Ma ...
- java applet怎么运行_Java如何运行Applet?运行Applet的两种方式
详细内容 applet是一个小型的动态Java程序,那么如何运行Applet?本篇文章就给大家介绍Applet,让大家了解Applet是什么,运行Applet的方法,希望对你们有所帮助. Java a ...
- java 设置word刷新_Java 设置Word中的表格自适应的3种方式
概述 class="MsoNormal">在Word创建表格时,可设置表格"自动调整",有3种情况,通过Java程序设置可调用相应的方法来实现,即: 根据 ...
- java reds 集群_java项目中配置redis-cluster集群的两种方式
本文分两部分: (1)jedisCluster (2)Spring-Data-Redis集群配置和RedisTemplate用法 我这里是在本机上搭建的3主3从6个redis实例. 一,jedisCl ...
- Java除法运算(保留小数)
编程的人都知道,java中的"/"."%"运算,其中前者为取整,后者取余数.那么有没有快捷的运算方法取正常的运算结果呢? 查了资料,发现很简单.代码如下: /* ...
- java 除 取模_除法运算和取模
package review20140420; /* * 除法和取模(整数除以整数,会出现除数不能为零的异常) */ public class Test2 { //程序的入口 public stati ...
- Android除法运算,保留小数
进行Android开发已经差不多2年多了,第一次写这个博客. 再开发中遇到int/int,我们希望保留小数点,那怎么办呢? 我写了个方法可以进行此操作. /*** 提供(相对)精确的除法运算.当发生除 ...
最新文章
- pta 整型关键字的平方探测法散列
- web前端之JavaScript
- java导入自定义类_导入自定义Java类
- BoW图像检索Python实战
- 如何快速向数据库插1000万数据?4种方法对比,它简单却速度最快
- 概述SharePoint 2007
- java 运行环境注册表_Java运行环境与Windows注册表
- linux的apache2.4限定某个目录禁止解析PHP及user_agent与PHP相关配置
- linux闹钟软件下载,电量充满警示闹铃
- 社会化生态农场品,社群+农产品,大有搞头
- Jetson TK1 一:调整屏幕分辨率
- 【驱动】linux设备驱动·字符设备驱动开发
- ASP.NET Core Web多语言项目
- 百度指数查关键词(惊到我啦)
- S7-200SMART编程软件在符号绝对模式下变量符号名显示不全的解决办法
- 本科三级专业目录计算机类,大学本科专业目录
- 【合作伙伴大练兵-安全】NGFW盒式防火墙问题排查和维护
- 无人驾驶环境感知设备中 激光雷达和摄像头各自的优缺点
- 网络文件共享服务之NFS
- Centos操作系统yum源的使用