数学和随机
1、Math类位于java.lang包中,是一个final类,不能被继承
2、Math类中所有方法都是static方法,直接使用类名.Math调用
Math
-
double d=-9.8; System.out.println(Math.ceil(d));/*向上取整 -9.0*/ System.out.println(Math.floor(d));/*向下取整 -10.0*/ System.out.println(Math.round(d));/*四舍五入返回最近参数(保留整数部分) 0.5舍去 -10*/ System.out.println(Math.round(-9.5));/*-9*/ System.out.println(Math.abs(d));/*绝对值 9.8*/ System.out.println(Math.max(2,5));/*最大值 5*/ System.out.println(Math.min(4.9,1));/*最小值 1.0*/ System.out.println(Math.pow(2,3));/*2^3=2*2*2=8.0*/ System.out.println(Math.sqrt(16));/*4.0*/ System.out.println(Math.random());/*随机值0.0~1.0*/
BigInteger
-
import java.math.BigInteger; public class BigIntegerTest { public static void main(String[] args) { String s1 = "3213213123322342342380808999798"; String s2 = "5213213123325342342380808999799"; //将字符串作为参数创建BigInteger对象 BigInteger bt1 = new BigInteger(s1); BigInteger bt2 = new BigInteger(s2); System.out.println("大数相加:" + bt1.add(bt2)); System.out.println("大数相减:" + bt1.subtract(bt2)); System.out.println("大数相乘:" + bt2.multiply(bt1).toString()); System.out.println("大数相除:" + bt1.divide(bt2));//自己会调用toString() System.out.println("转double:" + bt2.doubleValue());//超出double范围,不可控 System.out.println("转int:" + bt1.intValue());//超出int范围,不可控 System.out.println("大数求幂运算:" + bt1.pow(3)); System.out.println("大数最大值:"+bt1.max(bt2)); } }
BigDecimal
-
import java.math.BigDecimal; import java.math.RoundingMode; /**0.06 * 0.06*2=0.12,取整数为0, * 0.12*2=0.24 0 * 0.24*2=0.48 0 * 0.48*2=0.96 0 * 0.96*2=1.92 0 * 直到小数为0 * 存储的是二进制,结果为二进制转十进制 * */ public class BigDecimalTest { public static void main(String[] args) { System.out.println("*************double值的加减乘除************"); System.out.println("0.05 + 0.01=" + (0.05 + 0.01)); System.out.println("1.0 - 0.42=" + (1.0 - 0.42)); System.out.println("4.015 * 100=" + (4.015 * 100)); System.out.println("123.3 / 100=" + (123.3 / 100)); System.out.println("*************BigDecimal的加减乘除************"); BigDecimal bd1 = new BigDecimal("0.05"); BigDecimal bd2 = new BigDecimal("0.01"); System.out.println("0.05+0.01=" + bd1.add(bd2)); BigDecimal bd3 = new BigDecimal("1.0"); BigDecimal bd4 = new BigDecimal("0.42"); System.out.println("1.0-0.42=" + bd3.subtract(bd4)); BigDecimal bd5 = new BigDecimal("4.015"); BigDecimal bd6 = new BigDecimal("100"); System.out.println("4.015*100=" + bd5.multiply(bd6)); BigDecimal bd7 = new BigDecimal("123.3"); System.out.println("123.3/100=" + bd7.divide(bd6)); BigDecimal bd8 = new BigDecimal("7"); System.out.println("123.3/7=" + bd7.divide(bd8, 4, RoundingMode.HALF_UP)); //除法小数不能除尽,要设置保留小数的位数,和保留位数的规则(例如四舍五入) } }
Random
1、java.util包中的Random类可以用来生成不同类型的随机值,功能更为强大
2、java.util包中的Random类有多个生成随机数的相关方法:
-
import java.util.Random; public class RandomTest { public static void main(String[] args) { Random random = new Random();//创建random对象 //无范围的int类型值(包括负值) int intRandom = random.nextInt(); System.out.println(intRandom); for (int i = 0; i < 10; i++) { //控制随机制的范围 int intRandom1 = random.nextInt(10000); System.out.println(intRandom1); } System.out.println("________________________________"); for (int i = 0; i < 5; i++) { double dRandom = random.nextDouble(); System.out.println(dRandom);/*[0,1.0)*/ } Random random1 = new Random(20);//new Random(种子) for (int i = 0; i < 10; i++) { System.out.println(random1.nextInt(10000)); } } }
UUID
1、UUID
- UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,是唯一的机器生成的标识符;
- UUID都不能是人工生成的,这样风险太高;
- UUID是16字节128位长的数字,通常以36字节的字符串表示
- 通常在分布式系统中用来生成唯一ID
2、UUID具有多个版本,每个版本的算法不同;
- UUID Version 1:基于时间的UUID
- 通过计算当前时间戳、随机数和机器MAC地址得到。
- UUID Version 2:DCE安全的UUID
- 和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID 在实际中较少用到。
- UUID Version 3:基于名字的UUID(MD5)
- 通过计算名字和名字空间的MD5散列值得到。
- UUID Version 4:随机UUID
- 根据随机数,或者伪随机数生成UUID。
- UUID Version 5:基于名字的UUID(SHA1)
- 和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。
3、UUID由以下几部分的组合:
(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
(2)时钟序列。
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
-
import java.util.UUID; public class UUIDTest { public static void main(String[] args) { for (int i = 0; i < 5; i++) { UUID uuid=UUID.randomUUID(); System.out.println(uuid); //换掉'-' System.out.println(uuid.toString().replace("-","")); System.out.println("___________________________________________________________"); //oa->user id,邮件->user id } } }