Java的类包提供了一些常用类方便开发人员使用,例如我们之前讲过的:将基本数据类型封装起来的包装类 。接下来我们要学习解决常见数学问题的Math类。
一、Math类概述
开发人员可以使用运算符完成一些简单的数学运算,但是如果涉及到复杂运算,我们就需要用到Java提供的Math类,Math类中包含许多数学方法,比如最大值、最小值、绝对值、三角函数、指数运算、对数运算等等。除此之外,和Number包装类的Integer类一样,Math类也提供一些数字常量,比如PI、E等。
1、调用Math类的方法
Math类位于java.lang包中,封装着一些数学计算方法和常量。Math类中的数学方法都被定义为static形式,所以在程序中可以直接通过Math类的类型调用某个数学方法:
Math
.数学方法
例如:
System
.out
.println("90 度的正弦值:" + Math
.sin(Math
.PI
/2));
System
.out
.println("0度的余弦值:" + Math
.cos(0));
System
.out
.println("60度的正切值:" + Math
.tan(Math
.PI
/3));
System
.out
.println("1的反正切值: " + Math
.atan(1));
Console
:
90 度的正弦值:
1.0
0度的余弦值:
1.0
60度的正切值:
1.7320508075688767
1的反正切值:
0.7853981633974483
2、调用Math类的常量
在Math类中除了数学方法外还存在一些数学常量,比如PI、E等,这些数学常量作为Math类的成员变量存在,调用起来也很简单:
Math
.PI
;
Math
.E
;
例如:
System
.out
.println("圆周率π的值是:"+Math
.PI
);
System
.out
.println("自然对数底数e的值是:"+Math
.E
);
System
.out
.println("π/2的角度值:" + Math
.toDegrees(Math
.PI
/2));
Console
:
圆周率π的值是:
3.141592653589793
自然对数底数e的值是:
2.718281828459045
π
/2的角度值:
90.0
二、Math类常用运算方法
1、取值运算
方法返回值功能描述
min(double a,double b)double返回两个双精度参数中的最小值。min(int a, int b)int返回两个整型参数中的最小值。min(float a , float b)float返回两个浮点型参数中的最小值。min(long a ,long b)long返回两个长整型参数中的最小值。max(double a,double b)double返回两个双精度参数中的最大值。fma(double a,double b,double c)double返回三个双精度参数中的最大值。abs(int a)int返回整型参数的绝对值。abs(float a)float返回浮点型参数的绝对值。abs(double a )double返回双精度参数的绝对值。abs(long a)long返回长整型参数的绝对值。random()double生成一个双精度的随机数
2、取整函数
方法返回值功能描述
rint(float a)float返回与参数最接近的整数round(double a)double四舍五入,即将原来的数字加上 0.5 后再向下取整,返回双精度值round(folat a)float四舍五入,即将原来的数字加上 0.5 后再向下取整,返回浮点值floor(double a)double向下取整ceil(double a)double向上取整
3、三角函数
方法返回值功能描述
sin(double a)double正弦cos(double a)double余弦tan(double a)double正切asin()double反正弦acos()double反余弦atan()double反正切atan2()double将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。toRadians(double angded)double将参数转化为角度。toDegrees(double angdeg)double将角度转换为弧度。
4、指对运算
方法返回值功能描述
exp(double a)double自然底数指数运算log(double a)double自然底数对数运算log10(double a)double以10为底的对数运算sqrt(double a )double平方根cbrt(double a )double立方根pow(double a, double b)doublea的b次方
三、Math类方法的应用
实例1:使用Math类取最大值、最小值、绝对值及生成随机数
public class IntFunction {
public static void main(String
[] args
) {
System
.out
.println("6和8中比较大的是:"+Math
.max(6,8));
System
.out
.println("6.3和6.5中比较大的是:"+Math
.max(6.3,6.5));
System
.out
.println("6.2,6.3,6.6中比较大的是:"+Math
.fma(6.2,6.3,6.6));
System
.out
.println(" ");
System
.out
.println("6和8中比较小的是:"+Math
.min(6,8));
System
.out
.println("6.3和6.5中比较小的是:"+Math
.min(6.3,6.5));
System
.out
.println(" ");
System
.out
.println("6的绝对值"+Math
.abs(6));
System
.out
.println("6.3的绝对值:"+Math
.abs(6.3));
System
.out
.println("-6.7的绝对值:"+Math
.abs(-6.7));
System
.out
.println(" ");
double num1
= Math
.random();
System
.out
.println("取一个随机数:"+ num1
);
System
.out
.println(" ");
}
}
Console
:
6和
8中比较大的是:
8
6.3和
6.5中比较大的是:
6.5
6.2,6.3,6.6中比较大的是:
45.66
6和
8中比较小的是:
6
6.3和
6.5中比较小的是:
6.3
6的绝对值
6
6.3的绝对值:
6.3
-6.7的绝对值:
6.7
取一个随机数:
0.1500029019248258
实例2:比较不同取整方法的运算结果
public class AnyFunction {
public static void main(String
[] args
) {
double[] nums
= { 1.4, 1.5, 1.6, -1.4, -1.5, -1.6 };
for (double num
: nums
) {
test(num
);
System
.out
.println(" ");
}
}
private static void test(double num
) {
System
.out
.println("Math.rint(" + num
+ ")=" + Math
.rint(num
));
System
.out
.println("Math.floor(" + num
+ ")=" + Math
.floor(num
));
System
.out
.println("Math.round(" + num
+ ")=" + Math
.round(num
));
System
.out
.println("Math.ceil(" + num
+ ")=" + Math
.ceil(num
));
}
}
Console
:
Math
.rint(1.4)=1.0
Math
.floor(1.4)=1.0
Math
.round(1.4)=1
Math
.ceil(1.4)=2.0
Math
.rint(1.5)=2.0
Math
.floor(1.5)=1.0
Math
.round(1.5)=2
Math
.ceil(1.5)=2.0
Math
.rint(1.6)=2.0
Math
.floor(1.6)=1.0
Math
.round(1.6)=2
Math
.ceil(1.6)=2.0
Math
.rint(-1.4)=-1.0
Math
.floor(-1.4)=-2.0
Math
.round(-1.4)=-1
Math
.ceil(-1.4)=-1.0
Math
.rint(-1.5)=-2.0
Math
.floor(-1.5)=-2.0
Math
.round(-1.5)=-1
Math
.ceil(-1.5)=-1.0
Math
.rint(-1.6)=-2.0
Math
.floor(-1.6)=-2.0
Math
.round(-1.6)=-2
Math
.ceil(-1.6)=-1.0
实例3:实现指数、对数运算
public class ExponentFunction {
public static void main(String
[] args
) {
System
.out
.println("e的平方:"+Math
.exp(2) );
System
.out
.println("以e为底,e^2的对数是:"+Math
.log(Math
.exp(2)));
System
.out
.println("以10为底,100的对数是:"+Math
.log10(100));
System
.out
.println("100的平方根:"+Math
.sqrt(100));
System
.out
.println("1000的立方根:"+Math
.cbrt(1000));
System
.out
.println("10的15次方:"+ (long) Math
.pow(10,15));
}
}
console:
e的平方:
7.38905609893065
以e为底,e
^2的对数是:
2.0
以
10为底,
100的对数是:
2.0
100的平方根:
10.0
1000的立方根:
10.0
10的
15次方:
1000000000000000
实例4:实现三角函数运算
public class TrigonometricFunctions {
public static void main(String
[] args
) {
System
.out
.println(Math
.PI
);
System
.out
.println("90 度的正弦值:" + Math
.sin(Math
.PI
/2));
System
.out
.println("0度的余弦值:" + Math
.cos(0));
System
.out
.println("60度的正切值:" + Math
.tan(Math
.PI
/3));
System
.out
.println(" ");
System
.out
.println("1/2的反正弦值: " + Math
.atan(1));
System
.out
.println("1/2的反余弦值: " + Math
.atan(1));
System
.out
.println("1的反正切值: " + Math
.atan(1));
System
.out
.println("极坐标角度: " + Math
.atan2(1/2,1/2));
System
.out
.println(" ");
System
.out
.println("π/2的角度值:" + Math
.toDegrees(Math
.PI
/2));
System
.out
.println(" ");
System
.out
.println("180度的弧度是:" + Math
.toRadians(180));
}
}
Console
:
3.141592653589793
90 度的正弦值:
1.0
0度的余弦值:
1.0
60度的正切值:
1.7320508075688767
1/2的反正弦值:
0.7853981633974483
1/2的反余弦值:
0.7853981633974483
1的反正切值:
0.7853981633974483
极坐标角度:
0.0
π
/2的角度值:
90.0
180度的弧度是:
3.141592653589793
四、小结