概述
1.什么是BigDecimal
之前我们用到的double和float都可以处理16位的有效数字,然而多数运用于工程中,要求不需要很精确,但是在商业中需要精准运算,因此Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。在做精确运算时,我们不能使用传统的算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。
2.采用浮点运算存在的一些问题
System.out.println(0.2 + 0.1);
输出结果为:
主要原因就是计算机中所有的数字都是二进制表示的,但是浮点数没有办法完全用二进制表示,用二进制表示浮点数会损失一定的精度,就像上面0.1用二进制表示时是无限接近于0.1,就变成了0.2+0.1000000000004。
3.BigDecimal构造器
BigDecimal(int) 创建一个具有参数所指定整数值的对象。
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象 。
在2中已经说到采用浮点类型表示一个数会存在精度丢失,因此用的·第二种构造方法时也会存在精度丢失问题。所以通常建议第三种构造方法。
4.常用方法
4.1 数学运算
public BigDecimal add(BigDecimal value);
public BigDecimal subtract(BigDecimal value);
public BigDecimal multiply(BigDecimal value);
public BigDecimal divide(BigDecimal value);
四个方法分别对应数学运算中的加减乘除,使用时需要通过一个BigDecimal对象来调用方法。
4.2 截断和四舍五入
public static void main(String[] args)
{
BigDecimal a = new BigDecimal("2.1111111");
a = a.setScale(4, RoundingMode.HALF_UP); //保留后4位,并且四舍五入
System.out.println(a);
}
注:以上运算生成的结果是一个新的BigDecimal类型,类似于String不可变。
4.3 实际使用
在开发微信支付的时候设置转账金额都是用BigDecimal
void create(String orderId, BigDecimal amount);
当创建一个订单时:
payService.create("324132462643", BigDecimal.valueOf(0.01));
这里使用的构造器就是先将double型转变为string。类似于:
new BigDecimal("0.01");
最后
以上就是简单水池为你收集整理的java中的BigDecimal类型的全部内容,希望文章能够帮你解决java中的BigDecimal类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复