java.lang包
除默认继承java.lang.Object类外,无其它任何继承关系。
Math构造方法是私有的 我们不能直接调用构造方法创建对象。但由于Math中提供的属性及方法都是static修饰的,不需要创建对象。
Math类下方法 | 参数 | 返回值 | 特征 | 作用 |
---|---|---|---|---|
abs() | int,long,float,double | int,long,float,double | 静态 | 返回给定数字的绝对值 |
ceil() | double | double | 静态 | 向上取整 |
floor() | double | double | 静态 | 向下取整 |
rint() | double | double | 静态 | 取临近的整数,如果两边距离一样,则返回偶数 |
round() | double,float | long,int | 静态 | 四舍五入 |
max() | (int,int),(long,long),(float,float),(double,double) | int,long,float,double | 静态 | 取最大值 |
min() | (int,int),(long,long),(float,float),(double,double) | int,long,float,double | 静态 | 取最小值 |
pow() | double | double | 静态 | 求a的b次方 |
sqrt() | double | double | 静态 | 求开平方根 |
random() | double | 静态 | 随机产生一个数 [0.0–1.0) | |
sin() | double | double | 静态 | 求夹角的正弦值 |
cos() | double | double | 静态 | 求夹角的余弦值 |
tan() | double | double | 静态 | 求夹角的正切值 |
另附常用的三角函数值参照表:
三角函数 | 0 o 0^{o} 0o | 3 0 o 30^{o} 30o | 4 5 o 45^{o} 45o | 6 0 o 60^{o} 60o | 9 0 o 90^{o} 90o |
---|---|---|---|---|---|
sin α | 0 | 1 2 \frac{1}{2} 21 | 2 2 \frac{\sqrt{2}}{2} 22 | 3 2 \frac{\sqrt{3}}{2} 23 | 1 |
cos | 1 | 3 2 \frac{\sqrt{3}}{2} 23 | 2 2 \frac{\sqrt{2}}{2} 22 | 1 2 \frac{1}{2} 21 | 0 |
tan | 0 | 3 3 \frac{\sqrt{3}}{3} 33 | 1 | 3 \sqrt{3} 3 | — |
使用Math.random()产生随机小数的时候精确程度可能有些损失。例如:
要产生一个[5—100)之间的随机数。
我们通常的做法是:
double v = Math.random()*95+5;
Math.random()的取值范围为[0,1),取不到1,我们假设极端情况下,它取最大值0.999,这样一来,0.999乘以95的结果为94.905。也就是说,它的精确度会随着它乘以某个整数而下降。我们可以利用另一个工具类Random来更好得产生随机数。
java.util包,需要import导入。
除默认继承java.lang.Object类外,无其它任何继承关系。
Random类下没有静态方法,使用它之前必须创建对象。
Random r = new Random();
Random类中常用方法的调用 | 作用 |
---|---|
r.nextInt(); | 随机产生 int取值范围(-2147483648~+2147483647)的整数 有正有负 |
r.nextInt(int bound); | 随机产生一个 [0–bound) 整数 ,注意bound必须为正数 否则会出现如下的运行时异常IllegalArgumentException |
r.nextFloat() | 随机产生一个 [0.0—1.0)之间的浮点数 |
r.nextBoolean() | 随机产生一个boolean值 true false |
java.util包,需要import导入。
除默认继承java.lang.Object类外,无其它任何继承关系。
有构造方法,但没有无参构造方法。我们通常不去创建对象。
常用方法就一个:randomUUID()
这里说两个吧。
UUID类中常用方法 | 作用 |
---|---|
randomUUID() | 利用UUID的静态工厂伪随机生成一串UUID类型的32位16进制数 |
timestamp() | 获取与此UUID关联的时间戳值,返回值为long类型 |
UUID id = UUID.randomUUID();
System.out.println(id);//随机生成 9ae321b5-54dd-4111-8bdf-0eff93184b59
它通俗来讲就是一个存储大整数的类。当long类型存储不下,用它最合适。它的底层是利用了数组的动态扩容来存储大整数。
java.math包,需要import导入。
直接继承java.lang.Number类。
提供的构造方法全部都是带参数的,我们通常利用带String参数的构造方法创建这个类的对象。
BigInteger bi = new BigInteger("123");
做四则运算的四个方法:
add() subtract() multiply() divide()
这四个方法的参数和返回值都是BigInteger类型。
求阶乘的时候,由于阶乘运算的结果太大,我们的BigInteger类就可以派上用场了。
设计一个方法 用来计算给定数字的阶乘:
//设计一个方法 用来计算给定数字的阶乘
public BigInteger factorial(int num){
BigInteger result = new BigInteger("1");
for(int i=1;i<=num;i++){
result = result.multiply(new BigInteger(i+""));
}
return result;
}
public static void main(String[] args) {
TestMath tm = new TestMath();
System.out.println(tm.factorial(100));
}
100的阶乘终于算出来了,emmmm
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Process finished with exit code 0
float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。正式场合应该使用BigDecimal。
因为十进制的16.67本身就是无法用二进制精确表示的,也就说无论你的精度是多少位,都无法用二进制来精确表示16.67,所以对于double数字只能接近表示,这就是二进制计算机的缺点,就如同十进制也也无法表示1/3,1/6一样。如果用这个double来初始化bigDecimal的话就会出现同样的问题。
java.math包,需要import导入。
直接继承java.lang.Number类。
通常建议使用带有String参数的构造方法创建这个类的对象。
BigDecimal的构造函数public BigDecimal(double val)会损失了double 参数的精度。jdk中已经明确不建议使用new BigDecimal(double value)这种形式的构造函数,而是使用new BigDecimal(String value) 或BigDecimal.valueof( double value)。
做四则运算的四个方法:
add() subtract() multiply() divide()
这四个方法的参数和返回值都是BigDecima类型。另外这四个方法还有许多重载方法,这里不再说明。
除此之外还有一个常用方法:setScale()
举例:
对象.setScale(2,BigDecimal.ROUND_DOWN);
两个参数前面是保留小数点之后的位数 后面参数是设置的模式
BigDecimal bd = new BigDecimal(8.6893);
bd = bd.setScale(2,BigDecimal.ROUND_DOWN);
System.out.println(bd);//结果为:8.68
BigDecimal类中的常量ROUND_DOWN代表向下取整。
java.text包,这个包通常用来格式化数据,需要import导入。
直接继承java.text.Format类
通过带String参数的构造方法创建一个格式化对象。构造对象时使用0
和#
来控制格式化的模式(参数为pattern对象),0代表该位数字必须保留,#代表该位数字可有可无。
format():将一个小数格式化成一个字符串。
举例:
DecimalFormat df = new DecimalFormat("000.###");
String value = df.format(12.4586);
System.out.println(value);//012.459