floor翻译成地板,ceil翻译成天花板,我们可以理解为地板就是朝下取整,天花板是向上取整数
Math.floor结果是double类型,结果向下取整
System.out.println(Math.floor(11.50));
System.out.println(Math.floor(-11.50));
System.out.println(Math.floor(-11));
结果
11.0
-12.0
-11.0
Math.round结果是long类型(整数)向上取整数
System.out.println(Math.round(11.50));
System.out.println(Math.round(-11.50));
System.out.println(Math.round(-11));
System.out.println(Math.round(-11.6));
System.out.println(Math.round(11.6));
System.out.println(Math.round(-11.4));
System.out.println(Math.round(11.4));
12
-11
-11
-12
12
-11
11
Math.ceil结果是double类型向上取整数
System.out.println(Math.round(11.50));
System.out.println(Math.round(-11.50));
System.out.println(Math.round(-11));
12.0
-11.0
-11.0
看下floor和ceil的源码
public static double floor(double a) {
return floorOrCeil(a, -1.0, 0.0, -1.0);
}
public static double ceil(double a) {
return floorOrCeil(a, -0.0, 1.0, 1.0);
}
private static double floorOrCeil(double a,
double negativeBoundary,
double positiveBoundary,
double sign) {
//...............
double result = Double.longBitsToDouble(doppel & (~mask)); //这里将数据只保留在整数位,比如-11.1这里结果为-11
if (sign*a > 0.0)
result = result + sign;//这两行判断是核心代码
return result;
//................
}
ceil的sign是1.0,floor的sign为-1.0,如果传入的数据为-1.1
ceil:
if(-1.1*1.0>0){
}
result=-1;
floor:
if(-1.1*-1.0>0){
result=-1+-1
}