今天聊下,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的结果其实跟上面是一样,就不在详细分析。希望初学者有所帮助