【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();
}
【Java】常用数据类型转换(BigDecimal、包装类、日期等)的更多相关文章
- java常用数据类型转换
在Java开发过程中经常会涉及到数据类型的转换问题,比如数字型转字符型,字符型转日期型,字符串转数组等等,以及其他类型的强制转换等.经常出现,所以有必要总结一下. 1.如何将字串 String 转换成 ...
- Java高级数据类型转换:包装类、String字符串、Date类等与其他类型转换
1.包装类过渡类型转换 一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了.例如: 当希望把float型转换为double型时: float f1=1 ...
- 泛型集合、datatable常用数据类型转换Json帮助类
泛型集合.datatable常用数据类型转换Json帮助类 using System; using System.Data; using System.Configuration; using Sys ...
- Java中数据类型转换&基本类型变量和对象型变量
1.Java的数据类型分为三大类 布尔型,字符型和数值型 其中数值型又分为整型和浮点型 2.Java的变量类型 布尔型 boolean 字符型 char 整型 byte,short,int,lo ...
- Python基础学习笔记(九)常用数据类型转换函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-variable-types.html 3. http://www ...
- java常用类之BigDecimal
BigDecimal 小数计算丢失精度问题 在计算机中,所有文件都是以二进制存储的,数字运算也是使用二进制进行计算的,因为计算机中不存在小数点,所以我们通常说的浮点数如float.double都是计算 ...
- Java基础知识强化22:Java中数据类型转换
数据类型转换: (1). 自动转换 低级变量可以直接转换为高级变量,这叫自动类型转换.比如: byte b: int b: long b: float b: double b: 上面的语句可 ...
- Java中数据类型转换大全(个人总结)
一.字符串转换为其他类型 1.将字符串转化为int型 (1)方法一 int i = Integer.parseInt(String str); (2)方法二 int i = Integer.value ...
- Python常用数据类型转换
常用的数据类型转换 目标 了解类型转换的作用 掌握常用的类型转换 函数 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ...
- python运算符和常用数据类型转换
运算符 算术运算符 运算符 描述 实例 + 加 两个对象相加 a + b 输出结果 30 - 减 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 两个数相乘或是返回一个被重复若干 ...
随机推荐
- Android中的时间格式的校验
public class MainActivity extends Activity implements OnClickListener{ private Button btn1; private ...
- pta5-9 Huffman Codes (30分)
5-9 Huffman Codes (30分) In 1953, David A. Huffman published his paper "A Method for the Const ...
- PHP算法——生成唯一字符串
经常遇到忘记密码的情况,点击一下忘记密码,然后收到更改密码的链接,连接中往往都会有一段很长而且很乱的字符串.试想一下,如果出现了重复的字符串,那岂不是把别人的密码给重置了? 所以产生唯一数对于网站的安 ...
- web页面实时刷新之browser sync
web开发对实时刷新的需求 在刚开始学习前端时每次修改文件内容后都需要手工刷新下浏览器来看效果,做的次数多了就特别难受,有时仅仅修改了一个字母都需要刷新下页面查看 之后接触到编写边看的集成IDE,文件 ...
- Offic转换pdf 之asposeDLL插件
//excel转换 Workbook workbook = new Workbook(HttpContext.Current.Server.MapPath(docpath + "/" ...
- 网站架构:消息队列 Java后端架构
2017-01-13 一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构.是大型分布式系统不可缺少的中间 ...
- The seventeenth day
A good book is a good friend 好书如挚友
- window下隐藏apache版本和PHP脚本等敏感信息
隐藏Apache信息 1.1 主配置中启用httpd-default.conf 文件: conf/httpd.Conf 找到httpd-default.conf,删除前面的注释“#”,改成如下 Inc ...
- jquery-validate插件
jQuery Validation 插件 优点:1.表单验证非常简单方便,并且提供了许多配置项目2.国际化,可以自定义提示信息 命令行安装 //初始化bowerbower init //使用bower ...
- Android 5.0 以上监听网络变化
大家好,大概有一个多月没有更新博客了,我是干什么去了呢?很明显,程序员当然要加班……这一次跟大家分享一下新项目的一些心得. 监听网络变化在开发中是经常用到的,例如我们断网有一些友好的提示,或者根据不同 ...