JAVA核心技術I---JAVA基礎知識(數字相關類) java中equals和compareTo的區別---解惑
阿新 • • 發佈:2018-12-30
一:相關數字類
–整數 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,807(2^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-324dto 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
....