在 JAVA 中四舍五入采用 Math.round(T a) 函数,函数返回的是一个 long 类型的长整型,参数 a 可以是 double 也可以是 float。
查看 JDK 源码:
public static long round(double a) {
if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5
return (long)floor(a + 0.5d);
else
return 0;
}
public static double floor(double a) {
return StrictMath.floor(a); // default impl. delegates to StrictMath
}
public static double floor(double a) {
return floorOrCeil(a, -1.0, 0.0, -1.0);
}
其实具体实现还是挺复杂的。
需要注意的是 a 为负数的情况。
System.out.println("小数点后第一位=5");
System.out.println("正数:Math.round(11.5)=" + Math.round(11.5));
System.out.println("负数:Math.round(-11.5)=" + Math.round(-11.5));
System.out.println();
System.out.println("小数点后第一位<5");
System.out.println("正数:Math.round(11.46)=" + Math.round(11.46));
System.out.println("负数:Math.round(-11.46)=" + Math.round(-11.46));
System.out.println();
System.out.println("小数点后第一位>5");
System.out.println("正数:Math.round(11.68)=" + Math.round(11.68));
System.out.println("负数:Math.round(-11.68)=" + Math.round(-11.68));
输出结果是:
小数点后第一位=5
正数:Math.round(11.5)=12
负数:Math.round(-11.5)=-11 小数点后第一位<5
正数:Math.round(11.46)=11
负数:Math.round(-11.46)=-11 小数点后第一位>5
正数:Math.round(11.68)=12
负数:Math.round(-11.68)=-12
正数和我们平时学的一样,负数在小数点后第一位为5时,直接舍去小数部分,大于5时减一,小于5时直接舍去小数部分。