新工作轉到大數據方向,每天都要面對數據類型互相轉換的工作,再加上先前面試發現這部分的知識盲點,
決定復習之余自己再寫一套便捷的方法,以后會比較方便。(雖然公司有現成封裝的類,里頭還有些遺漏的地方,暫時不敢隨便修改 )
1. BigDecimal和基本類型之間的轉換
現在蹲在銀行里做項目,對數字的精准性要求較高。比起Java里常用的double、int這些數據類型,BigDecimal的好處在於能夠設置你想要的精度。
① BigDecimal和字符串String類型
//字符串 → BigDecimal String a = "1.2"; BigDecimal a2 = new BigDecimal(a); //Big Decimal → 字符串 BigDecimal b = new BigDecimal("1.2"); String b2 = b.toString(); //使用DecimalFormat可設置精度 DecimalFormat df = new DecimalFormat("0.00"); String b3 = df.format(b); System.out.println(b2);//1.2 System.out.println(b3);//1.20
② 同理,double和int等數據類型也可與BigDecimal進行轉換,但不建議使用double類型進行轉換(浮點數沒有辦法用二進制准確表示)
//浮點型 與 BigDecimal BigDecimal i = new BigDecimal(1.2);//浮點型 i.doubleValue(); //整型 與 BigDecimal BigDecimal i2 = new BigDecimal(1);//整型 i.intValue();
關於BigDecimal的具體計算和不建議用浮點數進行BigDecimal轉換,可以參照:https://www.cnblogs.com/LeoBoy/p/6056394.html
③BigDecimal的加減乘除
BigDecimal a = new BigDecimal("1"); BigDecimal b = new BigDecimal("2"); a.add(b);//加法 a+b a.subtract(b);//減法 a-b a.multiply(b);//乘法 axb a.divide(b);//除法 a/b int scale = 2;//精度 - 小數點后幾位 a.divide(b,scale,BigDecimal.ROUND_HALF_UP);//四舍五入
2. 基本數據類型和包裝類之間的轉換
在一次面試中,面試官問到裝箱拆箱,以及為什么要設置基本數據類型的包裝類的問題,后面那個問題答不上。
基本數據類型包裝類存在是有理由的,基本數據類型不支持面向對象的編程機制,在集合指定對象類型進行存儲時,由於基本數據類型不是對象,所以無法指定,但我們可以用基本數據類型的包裝類。在集合使用過程中,包裝類會自動拆箱封箱,從而達到存儲、獲取基本數據類型的功能。
//裝箱:基本類型 → 基本類型的包裝類 Integer i = 3; //拆箱: 包裝類型 → 基本類型 int ii = i; ii = new Integer(3); //基本類型 → 包裝類 Integer s1 = Integer.valueOf("1"); Integer s2 = Integer.valueOf(1); System.out.println(s1==s2);//true, s1,s2指向同一個數值 //Integer之間的比較 Integer i1 = 1; Integer i2 = 1; System.out.println(i1==i2);//true System.out.println(s1==i1);//true Integer i3 = 150; Integer i4 = 150; System.out.println(i3==i4);//false 超出Integer數值范圍 //Integer和new Integer的比較,新創建(new)的包裝類對象一定與其它包裝類不相等 Integer s3 = 1; Integer s4 = new Integer(1); Integer s5 = new Integer("1"); System.out.println(s3==s4);//false System.out.println(s4==s5);//false //Integer和int的比較 int c1 = Integer.parseInt("1"); Integer c2 = Integer.parseInt("1"); System.out.println(c1==c2);//Integer與int比較時會把Integer類型轉為int類型,比較的是值的大小
3. 日期
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str1 = sdf.format(date); String str2 = "2018年12月12日"; SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日"); try { Date date2 = sdf2.parse(str2);//給定的時間格式必須滿足或者少於字符串的位數 } catch (ParseException e) { e.printStackTrace(); }