java中的Math类

来源:互联网 发布:log4j2 知乎 编辑:程序博客网 时间:2024/04/30 06:40

 

Java中的Math类

  Java中的Math类属于java.lang包中,Math的所有方法均用static声明,所以使用该类中的方法时,可以直接使用包名·方法名,如:Math.sin();Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

  首先,java.lang.Math中的四舍五入,上,下取整方法:

四舍五入:

round(float a)
          返回最接近参数的 int。

     System.out.println(Math.round(5.4d));

     System.out.println(Math.round(5.5d));

     输出结果为:5

                          6

向上取整:

ceil(double a)
          返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。

    System.out.println(Math.ceil(5.4d));

    System.out.println(Math.ceil(5.5d));
     输出结果为:6.0

                         6.0

向下取整:

floor(double a)
          返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。

    System.out.println(Math.floor(5.4d));

    System.out.println(Math.floor(5.5d));
      输出结果为:5.0

                          5.0

  其中,在使用此类中的三角函数方法时,应注意方法的灵活运用,及传递合适的参数。

  以sin30°为例:JDK中Math.sin(double a)的源代码:

public static double sin(double a)

参数:

    a - 以弧度表示的角。

因此此时首先要把参数30转换为是弧度表示的角。使用方法sin(30*Math.PI/180),PI在数学方法中为π,而此时的π在角度里为180°,Math.PI/180就为1°,所以30*Math.PI/180就相当于了30°。

   System.out.println(Math.sin(30*Math.PI/180));

 

  输出结果为:0.49999999999999994

因为Math类中的方法直接计算出来的值均为近似值,若想得到精确值,需要使用Math中的四舍五入方法round()。

即为:

   double sin30 = Math.round(Math.sin(30*Math.PI/180)*100);

   System.out.println(“sin30=”+sin30/100);
    输出结果为:sin30 °= 0.5

查看Math.round(double a)的源代码:

public static long round(double a)

返回最接近参数的 long。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 long 类型。换句话说,结果等于以下表达式的值:

(long)Math.floor(a + 0.5d)。即Math.sin(30*Math.PI/180)= 0.49999999999999994,乘以100后得49.99999999,然后49.99999999加上0.5得50.49999999,此时再利用Math类中的另一方法floor(),向下取整,得到50.0,将50.0返回给double sin30,然后sin30°=sin30/100,整除以100,即得到sin30°的精确值0.50.此时我们事先知道sin30°的结果为一个小于1的小数,故使用round()方法,乘以100,四舍五入,然后再除去100.

  同理,当求反正弦时,如:asin0.5 Math.asin(0.5)*(180/Math.PI),此时的PI即π为圆周率的值,所以(180/Math.PI)得到的就是一弧度值,而后Math.asin(0.5)再乘以该一弧度的值,得到的就是弧度值,此时再利用round()方法,Math.round(Math.asin(0.5)*(180/Math.PI)*100),结果在整除以100即得到asin0.5的精确值为30°。

  当我们预测到结果的整数部分为一位或0的小数时,我们若需取得精确值可使用round()的四舍五入方法,同时计算时需要使用先乘以100,后整除以100的操作。倘若结果的整数部分为两位及其以上时,此时使用round()四舍五入方法,既不必使用先乘以100,后才整除以100的操作。因为四舍五入方法四舍五入之后进的是整数位,即整数位的首位加1。