Math.round
就是四舍五入!
public class MathTest {
public static void main(String[] args) {
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));
}
}
Math.round()方法
Math.round()方法即为我们常说的“四舍五入”方法,但用起来不注意的话就会犯错。
首先看下下面的几个结果:
Math.round(1.0)
Math.round(1.4)
Math.round(1.5)
Math.round(1.6)
结果分别为1,1,2,2。这没什么好说的。
那么如果传入的参数为负数呢?
Math.round(-1.0)
Math.round(-1.4)
Math.round(-1.5)
Math.round(-1.6)
结果分别为-1,-1,-1,-2。
注意Math.round(-1.5),也就是-1.5“四舍五入”的结果并不是-2,而是-1。这是为什么呢?
实际上,Math.round()方法准确说是“四舍六入”,5要进行判断对待。
Math.round()的原理是对传入的参数+0.5之后,再向下取整得到的数就是返回的结果,返回值为long型。这里的向下取整是说取比它小的第一个整数或者和它相等的整数。
因此Math.round(-1.5)的结果是-1.5 + 0.5 再向下取整,即-1.0取整,结果是-1.
Math.round(-1.4)的结果是 -1.4 + 0.5 即-0.9 向下取整,结果是-1。
同理,Math.round(1.5)即为 1.5 + 0.5 再向下取整,结果是2。
而“向下取整”实际上就是Math.floor()方法,注意Math.floor()返回的值为double类型的。
Math.floor(1.0) == 1.0
Math.floor(1.4) == 1.0
Math.floor(1.5) == 1.0
Math.floor(1.6) == 1.0
Math.floor(-1.0) == -1.0
Math.floor(-1.4) == -2.0
Math.floor(-1.5) == -2.0
Math.floor(-1.6) == -2.0
类似地,还有一个Math.ceil()方法,表示“向上取整”,得到的结果是比参数大的第一个整数或者和参数相等的数,返回值也是double类型的。
Math.ceil(1.0) == 1.0
Math.ceil(1.4) == 2.0
Math.ceil(1.5) == 2.0
Math.ceil(1.6) == 2.0
Math.ceil(-1.0) == -1.0
Math.ceil(-1.4) == -1.0
Math.ceil(-1.5) == -1.0
Math.ceil(-1.6) == -1.0