【Java】常用數據類型轉換(BigDecimal、包裝類、日期等)


新工作轉到大數據方向,每天都要面對數據類型互相轉換的工作,再加上先前面試發現這部分的知識盲點,

決定復習之余自己再寫一套便捷的方法,以后會比較方便。(雖然公司有現成封裝的類,里頭還有些遺漏的地方,暫時不敢隨便修改 )

 

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();
  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM