zoukankan      html  css  js  c++  java
  • JAVA核心技术I---JAVA基础知识(数字相关类)

    一:相关数字类

    –整数 Short, Int, Long
    –浮点数 Float, Double
    –大数类 BigInteger(大整数), BigDecimal(大浮点数)
    –随机数类 Random
    工具类 Math
    java.math包

    二:基本类型回顾

    short,16位,2个字节,有符号的以二进制补码表示的整数–(-32768-32767, -2^15-2^15-1),默认值0
    int, 32位,4个字节,有符号的以二进制补码表示的整数–(-2147483648--2147483647, -2^31-2^31-1),默认值0
    long, 64位,8个字节,有符号的以二进制补码表示的整数–-9,223,372,036,854,775,808(-2^63)--9,223,372,036,854,775,8072^63 -1),默认值0L
            short a1=32767;
            System.out.println(a1);
            
            int b1=2147483647;
            System.out.println(b1);
            
            long c1=2147483647;        //若是 在int范围类,会隐式转换
            System.out.println(b1);
            
            long c2=2147483648L;        //若是 超出int范围类,必须在后面加上L,不然会报错The literal 2147483648 of type int is out of range 
            System.out.println(b1);
    float,单精度,32位,4个字节,符合IEEE 754标准的浮点数,默认值0.0f。float的范围为1.40129846432481707e-45 to 3.40282346638528860e+38 (无论正负).
    double,双精度,32位,4个字节,符合IEEE 754标准的浮点数,默认值0.0d。double的范围为4.94065645841246544e-324d to 1.79769313486231570e+308d (无论正负)
    float和double都不能用来表示很精确的数
            //float f=1.23;    //错误,必须在后面加上f
            float f=1.23f;
            
            double d=4.56d;
            double e=4.564667877777979464646;    //正确,可以省略d
            
            System.out.println(f);    //1.23
            System.out.println((double)f);    //1.2300000190734863小转大,精度缺失
            System.out.println((float)e);     //4.5646677会截断
            
            System.out.println(f==1.22999999999f);    //true
            System.out.println(f-1.2299999999f);    //0.0
            
            System.out.println(d==4.55999999999999999);    //true
            System.out.println(d-4.55999999999999999);    //0.0

    三:大数字类(重点)

    (一)大整数类BigInteger:支持无限大整数运算

            BigInteger b1=new BigInteger("123456789");
            BigInteger b2=new BigInteger("987654321");
            System.out.println(b1+"+"+b2+"="+b1.add(b2));
            System.out.println(b1+"*"+b2+"="+b1.multiply(b2));
            System.out.println(b1+"/"+b2+"="+b1.divide(b2));
            System.out.println(b1+"-"+b2+"="+b1.subtract(b2));
            System.out.println("min in b1 b2:"+b1.min(b2));
            System.out.println("max in b1 b2:"+b1.max(b2));
            System.out.println("b1==b2?:"+b1.equals(b2));
            //求商取余,返回的是两个数据,用数组接收
            BigInteger res[]=b2.divideAndRemainder(b1);
            System.out.println(b1+"/"+b2+"="+res[0]+"......"+res[1]);
            int flag=b1.compareTo(b2);
            if(flag==0) {
                System.out.println("b1==b2");
            }else if(flag<0) {
                System.out.println("b1<b2");
            }else{
                System.out.println("b1>b2");
            }

    java中equals和compareTo的区别---解惑

    (二)大浮点数BigDecimal:支持无限大小数运算

            BigDecimal b1 = new BigDecimal("123456789.987654321"); // 声明BigDecimal对象
            BigDecimal b2 = new BigDecimal("987654321.123456789"); // 声明BigDecimal对象
            System.out.println("b1: " + b1 +  ", b2:" + b2);
            System.out.println("加法操作:" + b2.add(b1)); // 加法操作
            System.out.println("减法操作:" + b2.subtract(b1)); // 减法操作
            System.out.println("乘法操作:" + b2.multiply(b1)); // 乘法操作
            //需要指定位数,防止无限循环,或者包含在try-catch中
            System.out.println("除法操作:" + b2.divide(b1,10,BigDecimal.ROUND_HALF_UP)); // 除法操作
            
            System.out.println("最大数:" + b2.max(b1)); // 求出最大数
            System.out.println("最小数:" + b2.min(b1)); // 求出最小数
            
            int flag = b1.compareTo(b2);
            if (flag == -1)
                System.out.println("比较操作: b1<b2");
            else if (flag == 0)
                System.out.println("比较操作: b1==b2");
            else
                System.out.println("比较操作: b1>b2");

    注意:尽量采用字符串赋值

    System.out.println(new BigDecimal("2.3"));
    System.out.println(new BigDecimal(2.3));
    2.3
    2.29999999999999982236431605997495353221893310546875

    注意:除法需要指定位数,防止除不尽,无限循环。或者异常捕获

    四:Random 随机数类

    nextInt() 返回一个随机int
    nextInt(int a) 返回一个[0,a)之间的随机int
    nextDouble()返回一个[0.0,1.0]之间double
    ints 方法批量返回随机数组
    此外:Math.random() 返回一个[0.0,1.0]之间doub

    (一)Random类

            //第一种办法,采用Random类
            Random rd=new Random();
            System.out.println(rd.nextInt());
            System.out.println(rd.nextInt());
            
            System.out.println(rd.nextInt(100));
            System.out.println(rd.nextInt(100));
            
            System.out.println(rd.nextLong());
            System.out.println(rd.nextDouble());
            System.out.println(rd.nextBoolean());
            System.out.println(rd.nextBoolean());
            System.out.println(rd.nextFloat());
    1742142671
    -583003479
    76
    23
    1726795845571005920
    0.05085002528976956
    true
    true
    0.3958646

    (二)使用Math.random参数随机数

         //第二种,生成一个范围内的随机数 例如0到时10之间的随机数
            //Math.random[0,1)
            System.out.println(Math.round(Math.random()*10));

    (三)JDK8新增ints

    //JDK 8 新增方法
            rd.ints();  //返回无限个int类型范围内的数据
            int[] arr = rd.ints(10).toArray();  //生成10个int范围类的个数。
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
            System.out.println("=========================");
            
            arr = rd.ints(5, 10, 100).toArray();
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
            
            System.out.println("=========================");
            
            arr = rd.ints(10).limit(5).toArray();
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
    View Code

    五:数字工具类java.lang.Math

    绝对值函数abs
    对数函数log
    比较函数max、min
    幂函数pow
    四舍五入函数round等
    向下取整floor
    向上取整ceil
    ....
  • 相关阅读:
    缓存IO读写的方式
    mapboxgl 纠偏百度地图
    GIS常用算法
    DevExpress VCL TdxBar工具栏上的按钮等居右对齐无效的问题
    dxRichEditControl、Invalid operation in GDI+ (Code: 2)
    Indy+POP/SMTP收发邮件
    VUE父组件给子组件传对象
    Linux下进程间通信
    Linux下守护进程
    Linux下进程控制相关
  • 原文地址:https://www.cnblogs.com/ssyfj/p/10198609.html
Copyright © 2011-2022 走看看