我与夏风皆过客,惟愿博肖揽星河!

xzwyb

导航

数学和随机

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

Java中整数最大范围是long型,64位,如果需要使用超过long范围的大整数,可以使用BigInteger类;

BigInteger位于java.math包中,定义了一系列的数学运算方法,调用这些方法可以进行计算,不能使用运算符计算;

  • 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
            }
        }
    }

posted on 2022-04-09 18:36  B2328X  阅读(30)  评论(0编辑  收藏  举报