您的位置 首页 java

java基础第三弹Math类要注意的坑

今天聊下,java基础里,关于数字计算的一个常用类Math,这个类为我们提供了丰富的API,今天结合在项目过程中的遇到的坑来讲解一下。

Math很友好的为我们提供了一个常量,比如 PI ,E等,并且还为我们提供了一些集合函数,比如sin,cos等。

这些在实际项目中可能用到的比较少,今天的主角是ceil和floor两个方法。

先来看一段代码

public static void main(String[] args) {
 System.out.println(Math.ceil(10 / 3));
System.out.println(Math.ceil(10.0 / 3));
}
 

你认为两个结果是否是一样的呢?

很简单,运行一下便可以知道。

答案如下:

3.0

4.0

你是不是觉着也很诧异。

我们知道,如果是整数的除法会强转成整数,像代码中这种除不近的只会取整数位,舍弃小数位。如果是 浮点数 的话,则会按照浮点点数来取,保留小数位,精度按照 double 类型的精度保留。

代码如下
public static double ceil(double a) {
return StrictMath.ceil(a); // default impl. delegates to StrictMath
}
 

10/3 的结果为:3

10.0 / 3 的结果为:3.3333333333333335

至于为什么会是这样,从上面代码中可以看出,参数类型是double,也就是计算完成后,会强转成double类型,3编程3.0,向上取整也是3。

3.33向上取整的话则为4.0,按照浮点数来保存。

floor的结果其实跟上面是一样,就不在详细分析。希望初学者有所帮助

文章来源:智云一二三科技

文章标题:java基础第三弹Math类要注意的坑

文章地址:https://www.zhihuclub.com/186663.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图