JAVA核心技术I---JAVA基础知识(数字相关类) java中equals和compareTo的区别---解惑

一:相关数字类

–整数 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
....

猜你喜欢

转载自www.cnblogs.com/ssyfj/p/10198609.html