浅析BigDecimal的使用

在Java中,浮点数有两种:float 和 double,而计算机中的数据是以二进制存储的,浮点数会丢失一定的精确度,因此Java提供了BigDecimal来处理浮点数,BigDecimal是java.math包中提供的API类,用来对超过16位有效位的数进行精确的运算。

BigDecimal所创建的是对象,因此不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,必须调用其相对应的方法。调用方法中的参数也必须是BigDecimal的对象。

下面就BigDecimal的基本使用方法做以下介绍

一、将Double数据转换成BigDecimal

Double num = 123456789.98;
System.err.println(num);   //输出结果:1.2345678998E8
BigDecimal bd1=new BigDecimal(num);
System.err.println(bd1);   //输出结果:123456789.98000000417232513427734375
BigDecimal bd2=new BigDecimal(num + ""); 
System.err.println(bd2);   //输出结果:123456789.98

对比输出结果,要想正确取到num的值,正确的方法是

BigDecimal bd2=new BigDecimal(num + ""); 
System.err.println(bd2);   //输出结果:123456789.98

 

二、BigDecimal去掉科学计数法

Double num = 123456789.98;
System.err.println(num);  //输出结果:1.2345678998E8
java.text.NumberFormat NF = java.text.NumberFormat.getInstance();   
NF.setGroupingUsed(false);//去掉科学计数法显示
System.err.println("d:="+NF.format(num));     //输出结果:d:=123456789.98

 

三、BigDecimal的加、减、乘、除运算

以加法为例进行演示。

Double num = 123456789.98;
Double a = num + num;
System.err.println(a);   //输出结果:2.4691357996E8
BigDecimal b =new BigDecimal(a + ""); 
System.err.println(b);   //输出结果:246913579.96

BigDecimal b1 = new BigDecimal(Double.toString(num));
BigDecimal b2 = new BigDecimal(Double.toString(num));
System.err.println(b1.add(b2).doubleValue());   //输出结果:2.4691357996E8
BigDecimal c =new BigDecimal(b1.add(b2).doubleValue()+""); 
System.err.println(c);   //输出结果:246913579.96

对比下结果,由此可以看出,还是应该使用先运算再转换的方式来,或使用下面这种方式。

BigDecimal c =new BigDecimal(b1.add(b2).doubleValue()+""); 
System.err.println(c);   //输出结果:246913579.96

减法、乘法、除法均可以使用上面的方式进行运算,其具体方法如下

b1.subtract(b2).doubleValue();//减法
b1.multiply(b2).doubleValue();//乘法
b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();//除法

总结:

1.在单纯进行Double转换BigDecimal时,通过加""(双引号),创建新的BigDecimal对象进行转换;

2.在涉及到算术运算时,先进行基本的运算,最后再将结果以1的方式转换;

3.或先将数值转换,再通过BigDecimal特定的方法进行运算,然后使用.doubleValue()+""创建新的BigDecimal对象进行转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值