Java Math类

时间:2020-02-23 14:36:42  来源:igfitidea点击:

Java Math类是java.lang包的一部分。
基本上,Math类包含用于执行基本数字运算的方法,例如基本指数,对数,平方根和三角函数。
Java Math是最后一个类,它扩展了java.lang.Object。

Java数学类字段

Java Math类具有以下静态字段:

  • " public static final double E"(公共静态最终双精度E):比自然对数(2.718281828459045)的底数" e"更接近的双精度值。

  • " public static final double PI"(公共静态最终双倍PI):一个比pi更接近的双精度值,即圆的周长与其直径之比(3.141592653589793)。

Java数学函数

Java Math类包含用于执行基本数字运算的静态工厂方法。
让我们看一下下面的方法和示例。

  • abs(double a):此方法返回指定double值的绝对值。

  • abs(float a):此方法返回指定的float值的绝对值。

注意:对于上述方法,我们来看看以下情况:

  • 如果指定的参数为正零或者负零,则结果为正零。

  • 如果指定的参数不是负数,则返回该参数。

  • 如果指定的参数为负,则返回该参数的取反。

  • 如果指定的参数为无穷大,则结果为正无穷大。

  • 如果指定的参数为NaN,则结果为NaN。

  • (int a):该方法返回指定的int值的绝对值。
    如果指定的参数等于Integer.MIN_VALUE(-231)的值或者最负的可表示int值,则结果为相同的值,为负。

  • abs(long a)方法返回指定的long值的绝对值。
    如果指定的参数等于Long.MIN_VALUE(-263)的值或者最负可表示的long值,则结果是相同的值,该值为负。

注意:对于上述方法,让我们看一下以下情况:

  • 如果指定的参数不为负,则返回该参数。

  • 如果指定的参数为负,则返回该参数的取反。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math abs() method example
 * 
 * @author hyman
 *
 */
public class MathAbsExample {

	public static void main(String[] args) {
		try {
			//For integers
			System.out.println("Absolute value of Positive integer: "+Math.abs(5));
			System.out.println("Absolute value of Negative integer: "+Math.abs(-5));
			System.out.println("Absolute value of Negative Zero: "+Math.abs(-0));
			System.out.println("Absolute value of Most Negative integer: "+Math.abs(Integer.MIN_VALUE));
			
			//For longs
			System.out.println("Absolute value of Positive long: "+Math.abs(10L));
			System.out.println("Absolute value of Negative long: "+Math.abs(-10L));
			System.out.println("Absolute value of Most Negative long: "+Math.abs(Long.MIN_VALUE));
			
			//For doubles
			System.out.println("Absolute value of Positive double: "+Math.abs(5.55));
			System.out.println("Absolute value of Negative double: "+Math.abs(-6.66));
			
			//For floats
			System.out.println("Absolute value of Positive float: "+Math.abs(55.55f));
			System.out.println("Absolute value of Negative float: "+Math.abs(-66.66f));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

Absolute value of Positive integer: 5
Absolute value of Negative integer: 5
Absolute value of Negative Zero: 0
Absolute value of Most Negative integer: -2147483648
Absolute value of Positive long: 10
Absolute value of Negative long: 10
Absolute value of Most Negative long: -9223372036854775808
Absolute value of Positive double: 5.55
Absolute value of Negative double: 6.66
Absolute value of Positive float: 55.55
Absolute value of Negative float: 66.66
  • acos(double a):此方法返回指定double值的反余弦值。
    余弦返回角的值在0.0到pi之间。
    如果指定的参数为NaN或者其绝对值大于1,则结果为NaN。

  • (double a):此方法返回指定double值的反正弦值。
    返回的正弦角值在–pi/2至pi/2的范围内。

  • 如果指定的参数为NaN或者其绝对值大于1,则结果为NaN。

  • 如果自变量为零,则结果为零,其符号与自变量相同。

  • atan(double a):此方法返回指定double值的反正切值。
    切线返回角的值在–pi/2到pi/2之间。

  • 如果指定的参数为NaN,则结果为NaN。

  • 如果自变量为零,则结果为零,其符号与自变量相同。

  • " atan2(double y,double x)":此方法返回从直角坐标(x,y)转换为极坐标(r,theta)的角度theta。
    此方法通过计算-pi到pi范围内的y/x的反正切值来计算相位theta。

  • 如果任一自变量为NaN,则结果为NaN。

  • 如果第一个参数为正零,第二个参数为正,或者第一个参数为正且有限,第二个参数为正无穷大,则结果为正零。

  • 如果第一个参数为负零,第二个参数为正,或者第一个参数为负且有限,第二个参数为正无穷大,则结果为负零。

  • 如果第一个参数为正零,第二个参数为负,或者第一个参数为正且有限,而第二个参数为负无穷大,则结果是最接近pi的double值。

  • 如果第一个参数为负零,第二个参数为负,或者第一个参数为负且有限,第二个参数为负无穷大,则结果是最接近-pi的double值。

  • 如果第一个参数为正,第二个参数为正零或者负零,或者第一个参数为正无穷大,而第二个参数为有限,则结果是最接近pi/2的double值。

  • 如果第一个参数为负,第二个参数为正零或者负零,或者第一个参数为负无穷大,而第二个参数为有限,那么结果是最接近-pi/2的double值。

  • 如果两个参数均为正无穷大,则结果是最接近pi/4的double值。

  • 如果第一个参数为正无穷大,第二个参数为负无穷大,则结果是最接近3 * pi/4的double值。

  • 如果第一个参数为负无穷大,第二个参数为正无穷大,则结果是最接近-pi/4的double值。

  • 如果两个参数均为负无穷大,则结果是最接近-3 * pi/4的double值。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math different types of arc angle method example
 * 
 * @author hyman
 *
 */
public class MathArcExample {

	public static void main(String[] args) {
		try {
			//acos method
			System.out.println("acos Results:");
			System.out.println(Math.acos(0.111));
			System.out.println(Math.acos(1.11));
			
			//asin method
			System.out.println("asin Results:");
			System.out.println(Math.asin(0.0));
			System.out.println(Math.asin(-0.0));
			System.out.println(Math.asin(1.11));
			System.out.println(Math.asin(0.11));
			
			//atan method
			System.out.println("atan Results:");
			System.out.println(Math.atan(0));
			System.out.println(Math.atan(1.1));
			
			//atan2 method
			System.out.println("atan2 Results:");
			System.out.println(Math.atan2(0.0, 0.0));
			System.out.println(Math.atan2(-0.0, 0.0));
			System.out.println(Math.atan2(90.0, 45.0));
			System.out.println(Math.atan2(-0.0, -5.0));
			System.out.println(Math.atan2(-5.0, -5.0));
			System.out.println(Math.atan2(4.0, -5.0));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

acos Results:
1.4595671151542782
NaN
asin Results:
0.0
-0.0
NaN
0.11022304998774664
atan Results:
0.0
0.8329812666744317
atan2 Results:
0.0
-0.0
1.1071487177940904
-3.141592653589793
-2.356194490192345
2.4668517113662407
  • cbrt(double a)此方法返回指定double值的立方根。
    对于正有限x,cbrt(-x)== -cbrt(x);,即,负值的立方根是该值幅度的立方根的负数。

  • 如果参数为NaN,则结果为NaN。

  • 如果参数为无穷大,则结果为无穷大且符号与参数相同。

  • 如果自变量为零,则结果为零,其符号与自变量相同。

  • ceil(double a):此方法返回大于等于指定参数且等于数学整数的最小(最接近负无穷大)double值。

  • 如果参数值已经等于数学整数,则结果与参数相同。

  • 如果自变量是NaN或者无穷大或者正零或者负零,则结果与自变量相同。

  • 如果参数值小于零但大于-1.0,则结果为负零。

注意:Math.ceil(x)的值恰好是-Math.floor(-x)的值。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math cbrt and ceil methods example
 * 
 * @author hyman
 *
 */
public class MathMethodExample {

	public static void main(String[] args) {
		try {
			//cbrt method
			System.out.println("cube root of positive zero:" +Math.cbrt(0.0));
			System.out.println("cube root of negative zero:" +Math.cbrt(-0.0));
			System.out.println("cube root of positive number:" +Math.cbrt(27.0));
			System.out.println("cube root of negative number:" +Math.cbrt(-64.0));
			
			//ceil method
			System.out.println("ceil of positive zero:"+Math.ceil(0.0));
			System.out.println("ceil of negative zero:" +Math.ceil(-0.0));
			System.out.println("ceil of infine value:" +Math.ceil(1.0/0.0));
			System.out.println("ceil of positive number:" +Math.ceil(5.4));
			System.out.println("ceil of negative number:" +Math.ceil(-5.4));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

cube root of positive zero:0.0
cube root of negative zero:-0.0
cube root of positive number:3.0
cube root of negative number:-4.0
ceil of positive zero:0.0
ceil of negative zero:-0.0
ceil of infine value:Infinity
ceil of positive number:6.0
ceil of negative number:-5.0
  • exp(double a):此方法将欧拉数e提高为指定double值的幂。

  • 如果参数为NaN,则结果为NaN。

  • 如果参数为正无穷大,则结果为正无穷大。

  • 如果参数为负无穷大,则结果为正零。

  • expm1(double x):此方法返回ex -1。
    请注意,对于x接近0的值,expm1(x)+1的确切总和比exp(x)更接近ex的真实结果。
    指定的参数x是在ex -1的计算中将e提高到的指数。

  • 如果参数为NaN,则结果为NaN。

  • 如果参数为正无穷大,则结果为正无穷大。

  • 如果参数为负无穷大,则结果为-1.0。

  • 如果自变量为零,则结果为零,其符号与自变量相同。

任何有限输入的expm1结果必须大于或者等于-1.0。

  • floor(double a):此方法返回小于或者等于指定参数且等于数学整数的最大(最接近正无穷大)double值。

  • 如果参数值已经等于数学整数,则结果与参数相同。

  • 如果自变量是NaN或者无穷大或者正零或者负零,则结果与自变量相同。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math exp, expm1 and floor methods example
 * 
 * @author hyman
 *
 */
public class MathMethodExample2 {

	public static void main(String[] args) {
		try {
			//exp method
			System.out.println("exp of positive number:"+Math.exp(5));
			System.out.println("exp of positive infinite:"+Math.exp(Double.POSITIVE_INFINITY));
			System.out.println("exp of negative infinite:"+Math.exp(Double.NEGATIVE_INFINITY));
			System.out.println("exp of NaN:"+Math.exp(Double.NaN));
			System.out.println("exp of zero:"+Math.exp(0.0));
			
			//expm1 method
			System.out.println("expm1 of positive number:"+Math.expm1(5));
			System.out.println("expm1 of positive infinite:"+Math.expm1(Double.POSITIVE_INFINITY));
			System.out.println("expm1 of negative infinite:"+Math.expm1(Double.NEGATIVE_INFINITY));
			System.out.println("expm1 of Nan:"+Math.expm1(Double.NaN));
			System.out.println("expm1 of zero:"+Math.expm1(0.0));
			
			//floor method
			System.out.println("floor of positive number:"+Math.floor(55.0));
			System.out.println("floor of negative number:"+Math.floor(-66.0));
			System.out.println("floor of positive zero:"+Math.floor(0.0));
			System.out.println("floor of negative zero:"+Math.floor(-0.0));
			System.out.println("floor of positive infinite:"+Math.floor(Double.POSITIVE_INFINITY));
			System.out.println("floor of negative infinite:"+Math.floor(Double.NEGATIVE_INFINITY));
			System.out.println("floor of NaN:"+Math.floor(Double.NaN));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

exp of positive number:148.4131591025766
exp of positive infinite:Infinity
exp of negative infinite:0.0
exp of NaN:NaN
exp of zero:1.0
expm1 of positive number:147.4131591025766
expm1 of positive infinite:Infinity
expm1 of negative infinite:-1.0
expm1 of Nan:NaN
expm1 of zero:0.0
floor of positive number:55.0
floor of negative number:-66.0
floor of positive zero:0.0
floor of negative zero:-0.0
floor of positive infinite:Infinity
floor of negative infinite:-Infinity
floor of NaN:NaN
  • log(double a):此方法返回指定double值的自然对数(以e为底)。

  • 如果参数为NaN或者小于零,则结果为NaN。

  • 如果参数为正无穷大,则结果为正无穷大。

  • 如果参数为正零或者负零,则结果为负无穷大。

  • log10(double a):此方法返回指定double值的以10为底的对数。

  • 如果参数为NaN或者小于零,则结果为NaN。

  • 如果参数为正无穷大,则结果为正无穷大。

  • 如果参数为正零或者负零,则结果为负无穷大。

  • 如果参数对于整数n等于10n,则结果为n。

  • log1p(double x):此方法返回参数和1的和的自然对数。
    请注意,对于较小的x,log1p(x)的结果更接近ln(1 + x)的真实结果。
    ),而不是log(1.0 + x)的浮点运算。

  • 如果参数为NaN或者小于-1,则结果为NaN。

  • 如果参数为正无穷大,则结果为正无穷大。

  • 如果参数为负数,则结果为负无穷大。

  • 如果自变量为零,则结果为零,其符号与自变量相同。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math log, log10 and log1p methods example
 * 
 * @author hyman
 *
 */
public class MatLogMethodExample {

	public static void main(String[] args) {
		try {
			//log method
			System.out.println("log of positive number:"+Math.log(60));
			System.out.println("log of negative number:"+Math.log(-66));
			System.out.println("log of positive infinite:"+Math.log(Double.POSITIVE_INFINITY));
			System.out.println("log of negative infinite:"+Math.log(Double.NEGATIVE_INFINITY));
			System.out.println("log of NaN:"+Math.log(Double.NaN));
			System.out.println("log of positive zero:"+Math.log(0.0));
			System.out.println("log of negative zero:"+Math.log(-0.0));
			
			//log10 method
			System.out.println("log10 of positive number:"+Math.log10(100));
			System.out.println("log10 of negative number:"+Math.log10(-10));
			System.out.println("log10 of positive infinite:"+Math.log10(Double.POSITIVE_INFINITY));
			System.out.println("log10 of negative infinite:"+Math.log10(Double.NEGATIVE_INFINITY));
			System.out.println("log10 of NaN:"+Math.log10(Double.NaN));
			System.out.println("log10 of positive zero:"+Math.log10(0.0));
			System.out.println("log10 of negative zero:"+Math.log10(-0.0));
			
			//log1p method
			System.out.println("log1p of positive number:"+Math.log1p(100));
			System.out.println("log1p of negative number:"+Math.log1p(-1));
			System.out.println("log1p of positive infinite:"+Math.log1p(Double.POSITIVE_INFINITY));
			System.out.println("log1p of negative infinite:"+Math.log1p(Double.NEGATIVE_INFINITY));
			System.out.println("log1p of NaN:"+Math.log1p(Double.NaN));
			System.out.println("log1p of positive zero:"+Math.log1p(0.0));
			System.out.println("log1p of negative zero:"+Math.log1p(-0.0));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

log of positive number:4.0943445622221
log of negative number:NaN
log of positive infinite:Infinity
log of negative infinite:NaN
log of NaN:NaN
log of positive zero:-Infinity
log of negative zero:-Infinity
log10 of positive number:2.0
log10 of negative number:NaN
log10 of positive infinite:Infinity
log10 of negative infinite:NaN
log10 of NaN:NaN
log10 of positive zero:-Infinity
log10 of negative zero:-Infinity
log1p of positive number:4.61512051684126
log1p of negative number:-Infinity
log1p of positive infinite:Infinity
log1p of negative infinite:NaN
log1p of NaN:NaN
log1p of positive zero:0.0
log1p of negative zero:-0.0
  • max(double a,double b):此方法返回指定的两个double值中的较大者。
    结果是参数接近正无穷大。

  • max(float a,float b)此方法返回指定的两个float值中的较大者。
    结果是参数更接近于正无穷大。

注意:对于上述方法,让我们看一下以下情况:

  • 如果指定参数的任意一个值为NaN,则结果为NaN。

  • 如果参数具有相同的值,则结果为相同的值。

  • 如果一个自变量为正零,另一个自变量为负零,则结果为正零。

  • max(long a,long b)此方法返回指定的两个long值中的较大者。
    结果是参数更接近Long.MAX_VALUE(263-1)的值。
    如果参数具有相同的值,则结果为相同的值。

  • max(int a,int b)此方法返回指定的两个int值中的较大者。
    结果是参数更接近Integer.MAX_VALUE(231-1)的值。
    如果参数具有相同的值,则结果为相同的值。

  • min(double a,double b)此方法返回指定的两个double值中的较小者。
    结果是参数接近负无穷大。

  • min(float a,float b)此方法返回指定的两个float值中的较小者。
    结果是参数接近负无穷大。

注意:对于上述方法,让我们看一下以下情况:

  • 如果指定参数的任意一个值为NaN,则结果为NaN。

  • 如果参数具有相同的值,则结果为相同的值。

  • 如果一个自变量为正零,另一个自变量为负零,则结果为负零。

  • min(long a,long b)此方法返回指定的两个long值中的较小者。
    结果是参数更接近Long.MIN_VALUE(-263)的值。
    如果参数具有相同的值,则结果为相同的值。

  • min(int a,int b)此方法返回指定的两个int值中较小的一个。
    结果是参数更接近Integer.MIN_VALUE(-231)的值。
    如果参数具有相同的值,则结果为相同的值。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math min and max methods example
 * 
 * @author hyman
 *
 */
public class MathMinMaxMethodsExample {

	public static void main(String[] args) {
		try {
			//min method
			System.out.println("min of positive doubles:"+Math.min(50.55, 50.56));
			System.out.println("min of positive floats:"+Math.min(10.5f, 11.6f));
			System.out.println("min of positive longs:"+Math.min(557L, 656L));
			System.out.println("min of positive ints:"+Math.min(5, 6));
			System.out.println("min(-67, -55)="+Math.min(-67, -55));
			System.out.println("min(-45.50, -78.9)="+Math.min(-45.50, -78.9));
			System.out.println("min(-0.1, -0.0)="+Math.min(-0.1, -0.0));
			System.out.println("min(55, NaN)="+Math.min(55, Double.NaN));
			System.out.println("min(NaN, NaN)="+Math.min(Double.NaN, Double.NaN));
			System.out.println("min(10, 10)="+Math.min(10, 10));
			
			//max method
			System.out.println("max of positive doubles:"+Math.max(50.55, 50.56));
			System.out.println("max of positive floats:"+Math.max(10.5f, 11.6f));
			System.out.println("max of positive longs:"+Math.max(557L, 656L));
			System.out.println("max of positive ints:"+Math.max(5, 6));
			System.out.println("max(-67, -55)="+Math.max(-67, -55));
			System.out.println("max(-45.50, -78.9)="+Math.max(-45.50, -78.9));
			System.out.println("max(-0.1, -0.0)="+Math.max(-0.1, -0.0));
			System.out.println("max(55, NaN)="+Math.max(55, Double.NaN));
			System.out.println("max(NaN, NaN)="+Math.max(Double.NaN, Double.NaN));
			System.out.println("max(10, 10)="+Math.max(10, 10));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

min of positive doubles:50.55
min of positive floats:10.5
min of positive longs:557
min of positive ints:5
min(-67, -55)=-67
min(-45.50, -78.9)=-78.9
min(-0.1, -0.0)=-0.1
min(55, NaN)=NaN
min(NaN, NaN)=NaN
min(10, 10)=10
max of positive doubles:50.56
max of positive floats:11.6
max of positive longs:656
max of positive ints:6
max(-67, -55)=-55
max(-45.50, -78.9)=-45.5
max(-0.1, -0.0)=-0.0
max(55, NaN)=NaN
max(NaN, NaN)=NaN
max(10, 10)=10
  • pow(double a,double b)此方法将第一个自变量的值返回第二个自变量的幂。

  • 如果第二个参数为正零或者负零,则结果为1.0。

  • 如果第二个参数为1.0,则结果与第一个参数相同。

  • 如果第二个参数为NaN,则结果为NaN。

  • 如果第一个参数为NaN,第二个参数为非零,则结果为NaN。

  • 如果第一个自变量的绝对值大于1并且第二个自变量的绝对值为正无穷大,或者第一个自变量的绝对值小于1并且第二个自变量为负无穷大,则结果为正无穷大。

  • 如果第一个自变量的绝对值大于1,第二个自变量的绝对值为负无穷大,或者第一个自变量的绝对值小于1且第二个自变量为正无穷大,则结果为正零。

  • 如果第一个参数的绝对值等于1,而第二个参数为无限,则结果为NaN。

  • 如果第一个自变量为正零,第二个自变量大于零,或者第一个自变量为正无穷大,第二个自变量小于零,则结果为正零。

  • 如果第一个自变量为正零,第二个自变量小于零,或者第一个自变量为正无穷大,而第二个自变量大于零,那么结果为正无穷大。

  • 如果第一个参数为负零且第二个参数大于零但不是有限的奇数整数,或者第一个参数为负无穷大并且第二个参数小于零但不是有限的奇数整数,则结果为正零。

  • 如果第一个参数为负零,第二个参数为正有限奇数整数,或者第一个参数为负无穷大,第二个参数为负有限奇数整数,则结果为负零。

  • 如果第一个参数为负零且第二个参数小于零但不是有限的奇数整数,或者第一个参数为负无穷大并且第二个参数大于零但不是有限的奇数整数,则结果为正无穷大。

  • 如果第一个参数为负零,第二个参数为负有限奇数整数,或者第一个参数为负无穷整数,第二个参数为正有限奇数整数,则结果为负无穷大。

  • 如果第一个参数是有限的且小于零,则
    –如果第二个参数是有限偶数整数,则结果等于将第一个参数的绝对值提高至第二个参数的幂的结果
    –如果第二个参数是一个有限的奇数整数,则结果等于将第一个参数的绝对值提高到第二个参数的幂的结果的负数
    –如果第二个参数是有限的而不是整数,则结果为NaN。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math pow() method example
 * 
 * @author hyman
 *
 */
public class MathPowExample {

	public static void main(String[] args) {
		try {
			System.out.println("pow(5, -0.0)="+Math.pow(5, -0.0));
			System.out.println("pow(44, 0.0)="+Math.pow(44, 0.0));
			System.out.println("pow(45, 1.0)="+Math.pow(45, 1.0));
			System.out.println("pow(67, NaN)="+Math.pow(67, Double.NaN));
			System.out.println("pow(NaN, 77)="+Math.pow(Double.NaN, 77));
			System.out.println("pow(5, 1.0/0)="+Math.pow(5, 1.0/0));
			System.out.println("pow(0, -1.0/0)="+Math.pow(0, -1.0/0));
			System.out.println("pow(9, -1.0/0)="+Math.pow(9, -1.0/0));
			System.out.println("pow(0, 1.0/0)="+Math.pow(0, 1.0/0));
			System.out.println("pow(1, 1.0/0)="+Math.pow(1, 1.0/0));
			System.out.println("pow(0, 6)="+Math.pow(0, 6));
			System.out.println("pow(1.0/0, -1)="+Math.pow(1.0/0, -1));
			System.out.println("pow(0.0, -10)="+Math.pow(0.0, -10));
			System.out.println("pow(1.0/0, 67)="+Math.pow(1.0/0, 67));
			System.out.println("pow(-0.0, 44.50)="+Math.pow(-0.0, 44.50));
			System.out.println("pow(-1.0/0, -7.9)="+Math.pow(-1.0/0, -7.9));
			System.out.println("pow(-0.0, 7)="+Math.pow(-0.0, 7));
			System.out.println("pow(-1.0/0, -3)="+Math.pow(-1.0/0, -3));
			System.out.println("pow(-0.0, -44.50)="+Math.pow(-0.0, -44.50));
			System.out.println("pow(-1.0/0, 6.7)="+Math.pow(-1.0/0, 6.7));
			System.out.println("pow(-0.0, -3)="+Math.pow(-0.0, -3));
			System.out.println("pow(-1.0/0, 5)="+Math.pow(-1.0/0, 5));
			System.out.println("pow(-1.0, 6)="+Math.pow(-1.0, 6));
			System.out.println("pow(-2.0, 6)="+Math.pow(-2.0, 7));
			System.out.println("pow(-5.0, 6.6)="+Math.pow(-5.0, 6.6));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

pow(5, -0.0)=1.0
pow(44, 0.0)=1.0
pow(45, 1.0)=45.0
pow(67, NaN)=NaN
pow(NaN, 77)=NaN
pow(5, 1.0/0)=Infinity
pow(0, -1.0/0)=Infinity
pow(9, -1.0/0)=0.0
pow(0, 1.0/0)=0.0
pow(1, 1.0/0)=NaN
pow(0, 6)=0.0
pow(1.0/0, -1)=0.0
pow(0.0, -10)=Infinity
pow(1.0/0, 67)=Infinity
pow(-0.0, 44.50)=0.0
pow(-1.0/0, -7.9)=0.0
pow(-0.0, 7)=-0.0
pow(-1.0/0, -3)=-0.0
pow(-0.0, -44.50)=Infinity
pow(-1.0/0, 6.7)=Infinity
pow(-0.0, -3)=-Infinity
pow(-1.0/0, 5)=-Infinity
pow(-1.0, 6)=1.0
pow(-2.0, 6)=-128.0
pow(-5.0, 6.6)=NaN
  • random()此方法返回一个带正号的双精度值,大于或者等于0.0且小于1.0。
    返回值是从该范围内以均匀分布伪随机选择的。
    第一次调用此方法时,它将创建一个新的伪随机数生成器,就像通过以下表达式一样:new java.util.Random()。
    此新的伪随机数生成器此后将用于此方法的所有调用,并且不会在其他任何地方使用。
    此方法已正确同步,以允许多个线程正确使用。
    但是,如果许多线程需要以很高的速率生成伪随机数,则可以减少每个线程拥有自己的伪随机数生成器的竞争。

  • round(double a)该方法返回最接近于指定double参数的long,并舍入为整数。

  • 如果参数为NaN,则结果为0。

  • 如果参数为负无穷大或者任何小于或者等于Long.MIN_VALUE(-263)的值,则结果等于Long.MIN_VALUE的值。

  • 如果参数为正无穷大或者任何大于或者等于Long.MAX_VALUE(263-1)的值,则结果等于Long.MAX_VALUE的值。

  • round(float a)此方法返回与指定的float参数最接近的int,并四舍五入。

  • 如果参数为NaN,则结果为0。

  • 如果参数为负无穷大或者任何小于或者等于Integer.MIN_VALUE(-231)的值,则结果等于Integer.MIN_VALUE的值。

  • 如果参数为正无穷大或者任何大于或者等于Integer.MAX_VALUE(231-1)的值,则结果等于Integer.MAX_VALUE的值。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math random and round methods example
 * 
 * @author hyman
 *
 */
public class MathMethodExample3 {

	public static void main(String[] args) {
		try {
			//random method
			System.out.println("random number:"+Math.random());
			
			//round method
			System.out.println("round(0.0)="+Math.round(0.0));
			System.out.println("round(-0.0)="+Math.round(-0.0));
			System.out.println("round(NaN)="+Math.round(Double.NaN));
			System.out.println("round(-1.0/0)="+Math.round(-1.0/0));
			System.out.println("round(1.0/0)="+Math.round(1.0/0));
			System.out.println("round(55.789)="+Math.round(55.789));
			System.out.println("round(55)="+Math.round(55));
			System.out.println("round(5.6f)="+Math.round(5.6f));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

random number:0.6910799189555229
round(0.0)=0
round(-0.0)=0
round(NaN)=0
round(-1.0/0)=-9223372036854775808
round(1.0/0)=9223372036854775807
round(55.789)=56
round(55)=55
round(5.6f)=6
  • totogrees(double angrad)此方法将以弧度为单位的角度转换为以度为单位的近似等效角度。
    从弧度到度的转换通常是不精确的。

  • toRadians(double Angred):此方法将以度为单位的角度转换为以弧度为单位的近似等效角度。
    从度到弧度的转换通常是不精确的。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math toDegrees and toRadians methods example
 * 
 * @author hyman
 *
 */
public class MathMethodExample4 {

	public static void main(String[] args) {
		try {
			//toDegrees method
			System.out.println("1.5 radians into degrees="+Math.toDegrees(1.5));
			
			//toRadians method
			System.out.println("45 degrees into radians="+Math.toRadians(45));
			System.out.println("90 degrees into radians="+Math.toRadians(90));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

1.5 radians into degrees=85.94366926962348
45 degrees into radians=0.7853981633974483
90 degrees into radians=1.5707963267948966

Java 8中的数学类中的新方法

让我们来看一下Java 8中Math类中以下新增的方法和示例。

  • addExact(long x,long y):此方法返回其指定的long参数的总和,如果结果溢出long,则抛出ArithmeticException。

  • addExact(int x,int y)此方法返回其指定的int参数的和,并抛出ArithmeticException-如果结果溢出int。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math addExact method example
 * 
 * @author hyman
 *
 */
public class MathaddExactMethodExample {

	public static void main(String[] args) {
		try {
			System.out.println("sume of 5 and 8="+Math.addExact(5, 8));
			System.out.println(Math.addExact(Integer.MAX_VALUE, 1));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

sume of 5 and 8=13
java.lang.ArithmeticException: integer overflow
	at java.lang.Math.addExact(Unknown Source)
	at com.theitroad.examples.MathaddExactMethodExample.main(MathaddExactMethodExample.java:14)
  • subtractExact(long x,long y)此方法返回指定的long参数的差,它抛出ArithmeticException-如果结果长时间溢出。

  • subtractExact(int x,int y)此方法返回指定的int参数的差,并抛出ArithmeticException-如果结果溢出int。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math subtractExact method example
 * 
 * @author hyman
 *
 */
public class MathsubtractExactMethodExample {

	public static void main(String[] args) {
		try {
			System.out.println("difference of 5 and 8="+Math.subtractExact(5, 8));
			System.out.println(Math.subtractExact(Long.MIN_VALUE, 1));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

difference of 5 and 8=-3
java.lang.ArithmeticException: long overflow
	at java.lang.Math.subtractExact(Unknown Source)
	at com.theitroad.examples.MathsubtractExactMethodExample.main(MathsubtractExactMethodExample.java:14)
  • incrementExact(int a)此方法返回指定参数加1的结果,并抛出ArithmeticException-如果结果溢出一个int。

  • incrementExact(long a)此方法返回指定参数加1的结果,并抛出ArithmeticException-如果结果溢出long。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math incrementExact methods example
 * 
 * @author hyman
 *
 */
public class MathIncremenExactExample {

	public static void main(String[] args) {
		try {
			//incrementExact method
			System.out.println("increment of 100 ="+Math.incrementExact(100));
			System.out.println(Math.incrementExact(Integer.MAX_VALUE));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

increment of 100 =101
java.lang.ArithmeticException: integer overflow
	at java.lang.Math.incrementExact(Unknown Source)
	at com.theitroad.examples.MathIncrementDecrementExactExample.main(MathIncrementDecrementExactExample.java:15)
  • decrementExact(int a)此方法返回指定参数减一,并抛出ArithmeticException-如果结果溢出一个int。

  • decrementExact(long a)此方法返回指定参数减一,并抛出ArithmeticException-如果结果长时间溢出。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math decrementExact methods example
 * 
 * @author hyman
 *
 */
public class MathDecremenExactExample {

	public static void main(String[] args) {
		try {
			//decrementExact method
			System.out.println("decrement of 100 ="+Math.decrementExact(100));
			System.out.println(Math.decrementExact(Integer.MIN_VALUE));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

decrement of 100 =99
java.lang.ArithmeticException: integer overflow
	at java.lang.Math.decrementExact(Unknown Source)
	at com.theitroad.examples.MathDecremenExactExample.main(MathDecremenExactExample.java:15)
  • multiplyExact(int x,int y)此方法返回指定参数的乘法,如果结果溢出一个int,则抛出ArithmeticException。

  • multiplyExact(long x,long y)此方法返回指定参数的乘法,如果结果溢出long,则抛出ArithmeticException。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math multiplyExact methods example
 * 
 * @author hyman
 *
 */
public class MathMultiplyExactExample {

	public static void main(String[] args) {
		try {
			//multiplyExact method
			System.out.println("multiplication of 100 and 5 ="+Math.multiplyExact(100, 5));
			System.out.println(Math.multiplyExact(Integer.MAX_VALUE, 5));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

multiplication of 100 and 5 =500
java.lang.ArithmeticException: integer overflow
	at java.lang.Math.multiplyExact(Unknown Source)
	at com.theitroad.examples.MathMultiplyExactExample.main(MathMultiplyExactExample.java:15)
  • negateExact(int a)此方法返回指定参数的取反,如果结果溢出一个int,则抛出ArithmeticException。

  • negateExact(long a)此方法返回指定参数的取反,如果结果溢出long,则抛出ArithmeticException。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math negateExact methods example
 * 
 * @author hyman
 *
 */
public class MathNegateExactExample {

	public static void main(String[] args) {
		try {
			//negateExact method
			System.out.println("negation of 100 ="+Math.negateExact(100));
			System.out.println(Math.negateExact(Integer.MIN_VALUE));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

negation of 100 =-100
java.lang.ArithmeticException: integer overflow
	at java.lang.Math.negateExact(Unknown Source)
	at com.theitroad.examples.MathNegateExactExample.main(MathNegateExactExample.java:15)
  • floorDiv(int x,int y)此方法将第一个参数除以第二个,并在返回结果时调用floor()方法。

  • floorMod(int x,int y)此方法返回指定参数模数的底值。

让我们看下面的示例程序。

package com.theitroad.examples;

/**
 * Java Math floorDiv and floorMod methods example
 * 
 * @author hyman
 *
 */
public class MathMethodExample5 {

	public static void main(String[] args) {
		try {
			//floorDiv method
			System.out.println("floorDiv(7, 2)="+Math.floorDiv(7, 2));
			
			//floorMod method
			System.out.println("floorMod(7, 2)="+Math.floorMod(7, 2));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

上面程序的输出如下:

floorDiv(7, 2)=3
floorMod(7, 2)=1