新工作轉到大數據方向,每天都要面對數據類型互相轉換的工作,再加上先前面試發現這部分的知識盲點,
決定復習之余自己再寫一套便捷的方法,以后會比較方便。(雖然公司有現成封裝的類,里頭還有些遺漏的地方,暫時不敢隨便修改 )
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();
}
