叙述
Java开发时会遇到许多要计算的功能,Math作为一个基础的处理数据的工具类,也尤为常见,Math类有private的构造函数,所以无法创建Math类的对象;Math类中的所有方法都是static(静态)方法,所以可以直接通过类名来调用它们。
例如:
double p = Math.PI;
double a = Math.abs(-0.99237);
虽然Math类的使用非常简单,但是里面的方法还是需要详细了解后才能做到如臂使指,下面就是本文的主题,Math类的详解,一起来回忆回忆吧。
Math类提供了两个静态常量:
/**
* The {@code double} value that is closer than any other to
* e, the base of the natural logarithms.
*/
public static final double E = 2.7182818284590452354;
/**
* The {@code double} value that is closer than any other to
* pi, the ratio of the circumference of a circle to its
* diameter.
*/
public static final double PI = 3.14159265358979323846;
使用时直接调用即可,例如:
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.E);
}
public static void main(String[] args) {
//生成一个0.0到1.0的随机数
double a = Math.random();
//生成一个0-100的随机数
int b = (int) (Math.random()*100);
//输出所有值
System.out.println(a);
System.out.println(b);
}
总结:
Math.random()方法可以生成0.0-1.0之间的随机小数,但是一般常用于生成一个随机整数,例如验证码的拼接,随机取值等等功能都会用到。
public static void main(String[] args) {
double a = -1.1;
float b = -1;
long c = -1111111;
int d = -1;
//输出所有值为正数
System.out.println(Math.abs(a));
System.out.println(Math.abs(b));
System.out.println(Math.abs(c));
System.out.println(Math.abs(d));
}
总结:
Math.abs() 方法针对4种Java的基本数字类数据(float,int,double,long)进行处理,该方法可以将传入方法的负数变为正数返回,传入的值为正数时,依旧返回正数,此处谨记。
public static void main(String[] args) {
//10和20那个大
int a = Math.max(10, 20);
//-1和-5那个小
int b = Math.min(-1, -5);
//输出所有值
System.out.println("10和20那个大: " + a);
System.out.println("-1和-5那个小: " + b);
}
Math.max(a,b)和
Math.min(a,b)方法就是用来比较大小,适用于4种Java的基本数字类数据(float,int,double,long)比较大小的情况。a和b可以为不同数据类型,这样返回的结果就是占字节多的类型,如a是int、b是double,这样方法返回结果就会默认double类型。
public static void main(String[] args) {
//向上取整
double a = Math.ceil(0.1);
//向下取整
double b = Math.floor(-1.09);
//输出所有值
System.out.println("向上取整 " + a);
System.out.println("向下取整 " + b);
}
总结:
Math.ceil(a) 和Math.floor(a)方需要传double类型的值,返回的也是double类型的值,但是是整数。
public static void main(String[] args) {
//获取小数-5.5最近的整数,若有两个结果则取偶数
double a = Math.rint(-5.5);
//获取小数5.5最近的整数,若有两个结果则取偶数
double b = Math.rint(5.5);
System.out.println("小数-5.5最近的整数 " + a);
System.out.println("小数5.5最近的整数 " + b);
}
Math.rint(a)是取值距离double类型的a最近的整数(可以理解为一种四舍五入),有个特例就是当有两个和a差值一样的整数值时,方法会返回其中的偶数作为结果,例如
a=0.5时返回结果就是0.0,若a=1.5时返回结果就是2.0, 使用时一定要注意。
public static void main(String[] args) {
//参数为double类型,返回结果为long
long a = Math.round(5.49);
//参数为float类型,返回结果为int
int b = Math.round(1.51f);
//输出四舍五入后的值
System.out.println("5.49四舍五入 " + a);
System.out.println("1.51f四舍五入 " + b);
}
Math.round(a)方法计算a四舍五入后的结果时,a若为float类型则返回int类型的结果,若a为double类型则返回long类型的结果
public static void main(String[] args) {
//生成10的1次方
double a = Math.pow(10,1);
//生成10的3次方
double b = Math.pow(10,3);
//生成10的0.2次方
double c = Math.pow(10,0.2);
//生成10的-7次方
double d = Math.pow(10,-7);
//输出所有值
System.out.println("10的1次方" + a);
System.out.println("10的3次方" + b);
System.out.println("10的0.2次方" + c);
System.out.println("10的-7次方" + d);
}
Math.pow(a,b) 方法生成a的b次方的值,其中a和b可以是4种Java的基本数字类数据(float,int,double,long)其中一种,且b可以为负数,当a为负数时,方法返回的结果将为NaN,一般用于计算公式等功能。
public static void main(String[] args) {
//获取4的平方值
double a = Math.sqrt(4.0);
//获取8的立方值
double b = Math.cbrt(8.0);
//获取-8的立方值
double c = Math.cbrt(-8.0);
System.out.println("获取4的平方值 " + a);
System.out.println("获取8的立方值 " + b);
System.out.println("获取-8的立方值 " + c);
}
总结:
Math.sqrt(a)和Math.cbrt(a)都是求a的根,一个是求平方根,一个是求立方根。
public static void main(String[] args) {
//获取e的5次幂
double a = Math.exp(5.0) ;
System.out.println("e的5次幂: "+a);
}
Math.exp(a)就是用来计算E的a次幂,一般不常用
public static void main(String[] args) {
//获取5.0的对数
double a = Math.log(5.0) ;
//获取以10为底5.0的对数
double b = Math.log10(5.0) ;
//获取以5+1的对数
double c = Math.log1p(5.0) ;
System.out.println("5.0的对数: "+a);
System.out.println("以10为底5.0的对数: "+b);
System.out.println("以5+1的对数: "+c);
}
总结:
三个ln方法,没什么要说的
public static void main(String[] args) {
//获取90度的正弦值
double a = Math.sin(Math.PI/(180/90)) ;
//获取0的余弦值
double b = Math.cos(0);
//获取0的正切值
double c = Math.tan(0) ;
//获取-1的反正弦值
double d = Math.asin(-1);
//获取-1的反余弦值
double e = Math.acos(-1) ;
//获取90的反正切值
double f = Math.atan(90) ;
//将90,30的笛卡尔坐标转换为极坐标,并返回极坐标的角度值
double g = Math.atan2(90,30) ;
System.out.println("90度的正弦值: "+a);
System.out.println("0的余弦值: "+b);
System.out.println("1的正切值: "+c);
System.out.println("-1的反正弦值: "+d);
System.out.println("-1的反余弦值: "+e);
System.out.println("90的反正切值: "+f);
System.out.println("90,30的笛卡尔坐标转换为极坐标,并返回极坐标的角度值: "+g);
}
总结:
三角函数的计算,其中每个方法的参数和返回值都是double类型,参数以弧度代替角度来实现。
例如:计算 90 度的正弦值Math.sin(Math.PI/(180/90))
注意:计算数据时如果a是NaN或无穷大,则返回结果为NaN。
以上基本就是Java中Math工具类中的方法和详解,若有疑问可以留言!