1. 程式人生 > >JAVA核心技術I---JAVA基礎知識(數字相關類) java中equals和compareTo的區別---解惑

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
....