Math
- 位于
java.lang.Math
,直接使用,无需导包。 public final class Math
,final修饰类,这个类不能被继承private Math() {}
构造器私有化,不能创建Math类的对象- Math内部的所有的属性,方法都被static修饰:
类名.方法名
直接调用,无需创建对象: - 可使用静态方法默认使用Math方法
import static java.lang.Math.*;
字段
static double E
public static final double E = 2.7182818284590452354;
比任何其他值都更接近 e(即自然对数的底数)的double
值。
static double PI
public static final double PI = 3.14159265358979323846;
比任何其他值都更接近 pi(即圆的周长与直径之比)的
double
值。
方法
Modifier and Type | 方法 | 描述 |
---|---|---|
static double/ float/int/long | abs(double/float/int/long a) | 返回 double/float/int/long 值的绝对值。 |
static double | acos(double a) | 返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间。 |
static double | asin(double a) | 返回一个值的反正弦;返回的角度范围在 -pi/2 到 pi/2 之间。 |
static double | atan(double a) | 返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间。 |
static double | atan2(double y, double x) | 将矩形坐标 (x , y ) 转换成极坐标 (r, theta),返回所得角 theta。 |
static double | cbrt(double a) | 返回 double 值的立方根。 |
static double | ceil(double a) | 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。 |
static double | copySign(double magnitude, double sign) | 返回带有第二个浮点参数符号的第一个浮点参数。 |
static float | copySign(float magnitude, float sign) | 返回带有第二个浮点参数符号的第一个浮点参数。 |
static double | cos(double a) | 返回角的三角余弦。 |
static double | cosh(double x) | 返回 double 值的双曲线余弦。 |
static double | exp(double a) | 返回欧拉数 e 的 double 次幂的值。 |
static double | expm1(double x) | 返回 ex -1。 |
static double | floor(double a) | 返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。 |
static int | getExponent(double d) | 返回 double 表示形式中使用的无偏指数。 |
static int | getExponent(float f) | 返回 float 表示形式中使用的无偏指数。 |
static double | hypot(double x, double y) | 返回 sqrt(x2 +y2),没有中间溢出或下溢。 |
static double | IEEEremainder(double f1, double f2) | 按照 IEEE 754 标准的规定,对两个参数进行余数运算。 |
static double | log(double a) | 返回 double 值的自然对数(底数是 e)。 |
static double | log10(double a) | 返回 double 值的底数为 10 的对数。 |
static double | log1p(double x) | 返回参数与 1 之和的自然对数。 |
static double/ float/int/long | max(double/float/int/longa, double/float/int/longb) | 返回两个 double/float/ int/long 值中较大的一个。 |
static double/ float/int/long | min(double/float/int/long a, double/float/int/long b) | 返回两个 double/float/ int/long 值中较小的一个。 |
static double | nextAfter(double start, double direction) | 返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。 |
static float | nextAfter(float start, double direction) | 返回第一个参数和第二个参数之间与第一个参数相邻的浮点数。 |
static double | nextUp(double d) | 返回 d 和正无穷大之间与 d 相邻的浮点值。 |
static float | nextUp(float f) | 返回 f 和正无穷大之间与 f 相邻的浮点值。 |
static double | pow(double a, double b) | 返回第一个参数的第二个参数次幂的值。 |
static double | random() | 返回带正号的 double 值,该值大于等于 0.0 且小于 1.0 。 |
static double | rint(double a) | 返回最接近参数并等于某一整数的 double 值。 |
static long | round(double a) | 返回最接近参数的 long 。 |
static int | round(float a) | 返回最接近参数的 int 。 |
static double | scalb(double d, int scaleFactor) | 返回 d × 2scaleFactor ,其舍入方式如同将一个正确舍入的浮点值乘以 double 值集合中的一个值。 |
static double/float | scalb(double/float d/f, int scaleFactor) | 返回 f × 2scaleFactor ,其舍入方式如同将一个正确舍入的浮点值乘以 float 值集合中的一个值。 |
static double/float | signum(float d/f) | 返回参数的符号函数;如果参数为 0,则返回 0;如果参数大于 0,则返回 1.0;如果参数小于 0,则返回 -1.0。 |
static double | sin(double a) | 返回角的三角正弦。 |
static double | sinh(double x) | 返回 double 值的双曲线正弦。 |
static double | sqrt(double a) | 返回正确舍入的 double 值的正平方根。 |
static double | tan(double a) | 返回角的三角正切。 |
static double | tanh(double x) | 返回 double 值的双曲线余弦。 |
static double | toDegrees(double angrad) | 将用弧度表示的角转换为近似相等的用角度表示的角。 |
static double | toRadians(double angdeg) | 将用角度表示的角转换为近似相等的用弧度表示的角。 |
static double/float | ulp(double/float d/f) | 返回参数的 ulp 大小。 |
实例
public class Test {
public static void main(String[] args) {
//常用属性:
System.out.println(Math.PI); //3.141592653589793
//常用方法:
System.out.println("随机数:"+Math.random()); //随机数:0.44787341064736186。[0.0,1.0)
System.out.println("绝对值:"+Math.abs(-8)); //绝对值:8
System.out.println("向上取值:"+Math.ceil(7.1)); //向上取值:8.0
System.out.println("向下取值:"+Math.floor(8.88)); //向下取值:8.0
System.out.println("四舍五入:"+Math.round(4.5)); //四舍五入:5
System.out.println("取最大值:"+Math.max(6, 8)); //取最大值:8
System.out.println("取最小值:"+Math.min(6, 8)); //取最小值:6
}
}
静态导入
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
//常用属性:
System.out.println(PI); //3.141592653589793
//常用方法:
System.out.println("随机数:"+random()); //随机数:0.257254104809876。[0.0,1.0)
System.out.println("绝对值:"+abs(-8)); //绝对值:8
System.out.println("向上取值:"+ceil(7.1)); //向上取值:8.0
System.out.println("向下取值:"+floor(8.88)); //向下取值:8.0
System.out.println("四舍五入:"+round(4.5)); //四舍五入:5
System.out.println("取最大值:"+max(6, 8)); //取最大值:8
System.out.println("取最小值:"+min(6, 8)); //取最小值:6
}
}
Math.random()
- 底层使用Random()类实现
public static double random() { //返回Random对象
// nextDouble()在 [0.0 , 1.0) 之间生产的 double 值。
return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble();
}
private static final class RandomNumberGeneratorHolder {
static final Random randomNumberGenerator = new Random();
}
Random
本类的实例用于生成伪随机数流。此类使用 48 位的种子,使用线性同余公式 (linear congruential form) 对其进行了修改
很多应用程序会发现 Math.random()
方法更易于使用。
构造方法
-
Random()
创建一个新的随机数生成器。 实际上底层还是使用Random(long seed)
。```java public Random() { this(seedUniquifier() ^ System.nanoTime()); } ```
-
Random(long seed)
使用单个 long 种子创建一个新的随机数生成器。
方法
Modifier and Type | 方法 | 描述 |
---|---|---|
protected int | next(int bits) | 生成下一个伪随机数。 |
boolean | nextBoolean() | 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。 |
void | nextBytes(byte[] bytes) | 生成随机字节并将其置于用户提供的 byte 数组中。 |
double | nextDouble() | 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。 |
float | nextFloat() | 返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。 |
double | nextGaussian() | 返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double 值,其平均值是 0.0,标准差是 1.0。 |
int | nextInt() | 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 |
int | nextInt(int n) | 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。 |
long | nextLong() | 返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。 |
void | setSeed(long seed) | 使用单个 long 种子设置此随机数生成器的种子。 |
实例
public class Ran {
public static void main(String[] args) {
//利用带参数的构造器创建对象:
Random r1 = new Random(System.currentTimeMillis());
int i = r1.nextInt();
System.out.println(i);
//利用空参构造器创建对象:
Random r2 = new Random();//实际底层还是调用了带参构造器
System.out.println(r2.nextInt(10));//在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
System.out.println(r2.nextDouble());//在 0.0 和 1.0 之间均匀分布的 double 值。
}
}