自定义时刻近似函数roundToQuarter(Double time) 浮点数取整数部分

本文介绍了一种将时间数字精确到四分之一小时的算法,通过将时间拆分为整数部分和小数部分,利用Math.floor()函数进行下取整,并根据小数部分的值进行相应的四舍五入处理。示例中展示了如何将16.19857143小时转换为16.25小时。

最近遇到一个很怪的需求:

//make the hours nearest to Quarter like 0.00,0.25,0.50,0.75

就是把获得的时间数字,精确到quarter( one Quarter  ==1/4 hour);

target:if fractionaPart belong to(0,0.125] set 0,if in (0.125,0.25] set 0.25 ;and so on

处理样例:16.19857143 (hours)= = 16.25

====思路====

因为要比较的是小数部分,所以先把整数部分和小数拆开,再拿小数比区间。

关于取整数的方法网上有很多,

一 是变成字符串再拆开放数组里。

二  把double强转int,这个风险最高了,容易丢失。

三 然后看了java和javascript都有Math.floor(double d) 和Math.ceil(double d)

 System.out.println(Math.floor(1.95));//取小于等于n的最大整数(下取整)== 1.0

 System.out.println(Math.ceil(1.95));//取大于等于n的最小整数(上取整) ==  2.0

所以当然用这个Math.floor(double d)比较好了。

下来的就没有什么麻烦的了。

====代码====

	public static Double roundToQuarter(Double time) {
		
                Double intPart = Math.floor(time);
		Double fractionaPart = time - Math.floor(time);

		if (fractionaPart > 0.00 && fractionaPart < 0.125) {
			intPart = intPart + 0.00;
			return intPart;
		} else if (fractionaPart >= 0.125 && fractionaPart <= 0.25) {
			intPart = intPart + 0.25;
			return intPart;
		} else if (fractionaPart > 0.25 && fractionaPart < 0.375) {
			intPart = intPart + 0.25;
			return intPart;
		} else if (fractionaPart >= 0.375 && fractionaPart <= 0.50) {
			intPart = intPart + 0.50;
			return intPart;
		} else if (fractionaPart > 0.50 && fractionaPart < 0.625) {
			intPart = intPart + 0.50;
			return intPart;
		} else if (fractionaPart >= 0.625 && fractionaPart <= 0.75) {
			intPart = intPart + 0.75;
			return intPart;
		} else if (fractionaPart > 0.75) {
			intPart = intPart + 1.00;
			return intPart;
		}
		return intPart;
	}


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值