2021-06-18Math.floor,Math.round,Math.ceil的区别
Posted luffy5459
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-06-18Math.floor,Math.round,Math.ceil的区别相关的知识,希望对你有一定的参考价值。
在java语言和javascript语言中都有Math.floor,Math.round,Math.ceil等方法,他们是有一些区别的,都是在对浮点数做处理,他们的功能,从字面意思就可以看出来,floor就是地板,向下取整,round做动词有四舍五入的意思,因此就是做四舍五入的,ceil动词是装天花板,是向上取整。
这三者还有一个很明显的区别:floor,ceil都是返回double类型,而round返回的是long类型。
下面给出一个示例,我们从示例中感受一下他们用法的区别:
package com.xxx.huali.hualitest.mathmethod;
public class MathDemo {
//+
private static final double a = 9.4;
private static final double b = 9.5;
private static final double c = 9.6;
//-
private static final double e = -9.4;
private static final double f = -9.5;
private static final double g = -9.6;
//floor
//n.地板;地面;(车厢内的)底板;楼层
//向下取整
public static void floor() {
System.out.println("floor(9.4)="+Math.floor(a));
System.out.println("floor(9.5)="+Math.floor(b));
System.out.println("floor(9.6)="+Math.floor(c));
System.out.println("floor(-9.4)="+Math.floor(e));
System.out.println("floor(-9.5)="+Math.floor(f));
System.out.println("floor(-9.6)="+Math.floor(g));
}
//round
//v. 绕行;绕过;(使)成圆形;变圆;(将数字调高或调低)使成为整数;把(数字)四舍五入;
//四舍五入
public static void round() {
System.out.println("round(9.4)="+Math.round(a));
System.out.println("round(9.5)="+Math.round(b));
System.out.println("round(9.6)="+Math.round(c));
System.out.println("round(-9.4)="+Math.round(e));
System.out.println("round(-9.5)="+Math.round(f));
System.out.println("round(-9.6)="+Math.round(g));
}
//ceil
//v.装天花板;装壁板;装隔板
//向上取整
public static void ceil() {
System.out.println("ceil(9.4)="+Math.ceil(a));
System.out.println("ceil(9.5)="+Math.ceil(b));
System.out.println("ceil(9.6)="+Math.ceil(c));
System.out.println("ceil(-9.4)="+Math.ceil(e));
System.out.println("ceil(-9.5)="+Math.ceil(f));
System.out.println("ceil(-9.6)="+Math.ceil(g));
}
public static void main(String[] args) {
System.out.println("向下取整");
floor();
System.out.println("四舍五入");
round();
System.out.println("向上取整");
ceil();
}
}
运行代码,打印信息如下:
从打印结果来看,向下取整,向上取整似乎问题不大,符合我们的预期,但是在四舍五入的时候,正数的四舍五入也没有问题,负数大部分也不会有问题,唯独问题在x.5这个数据上有问题,怎么会这样?
我们怎么去记忆这个特殊情况呢?有的文章提示说关于Math.round(x)计算四舍五入,如果按照Math.floor(x+0.5)来计算,那么就没有问题了。实际上我们可以检验一下:
package com.xxx.huali.hualitest.mathmethod;
public class RoundDemo {
private static final double a = 9.4;
private static final double b = 9.5;
private static final double c = 9.6;
private static final double e = -9.4;
private static final double f = -9.5;
private static final double g = -9.6;
public static void main(String[] args) {
System.out.println("round(9.4) ="+Math.round(a)+"\\tfloor(9.4+0.5) ="+Math.floor(a+0.5));
System.out.println("round(9.5) ="+Math.round(b)+"\\tfloor(9.5+0.5) ="+Math.floor(b+0.5));
System.out.println("round(9.6) ="+Math.round(c)+"\\tfloor(9.6+0.5) ="+Math.floor(c+0.5));
System.out.println("round(-9.4)="+Math.round(e)+"\\tfloor(-9.4+0.5)="+Math.floor(e+0.5));
System.out.println("round(-9.5)="+Math.round(f)+"\\tfloor(-9.5+0.5)="+Math.floor(f+0.5));
System.out.println("round(-9.6)="+Math.round(g)+"\\tfloor(-9.6+0.5)="+Math.floor(g+0.5));
}
}
运行程序,打印结果:
我们甚至可以直接用最简单的比较法来验证:
如果需要去记忆他们的区别,最好直接从他们的字面意思理解,对于round需要注意负数的特殊情况。
以上是关于2021-06-18Math.floor,Math.round,Math.ceil的区别的主要内容,如果未能解决你的问题,请参考以下文章
Math.floor,Math.ceil,Math.rint,Math.round用法
随机数Math.floor(Math.random()*52+1)
随机数Math.floor(Math.random()*52+1)