【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 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
bigdecimal除法保留小数
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();
  }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。