最近遇到一个很怪的需求:
//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;
}
本文介绍了一种将时间数字精确到四分之一小时的算法,通过将时间拆分为整数部分和小数部分,利用Math.floor()函数进行下取整,并根据小数部分的值进行相应的四舍五入处理。示例中展示了如何将16.19857143小时转换为16.25小时。

被折叠的 条评论
为什么被折叠?



