Java大数BigDecimal基础运用

引入

我们在用基本数据类型double进行运算时,会有这样的问题:

double a = 1;
double b = 0.9;
System.out.println(a-b);

按照我们的数学常识结果应该为:0.1,但实际输出结果为:0.09999999999999998

这是因为double是双精度浮点型,虽然它赋值为0.9,但实际在计算机中存储可能为0.9000000023,那么两个浮点数加减结果肯定会有出入。

然后不管是double还是long都是八个字节,当数据超过一定长度后,就无法保证数据完整了。

BigDecimal

BigDecimal不仅能解决浮点数运算结果问题,还能处理运算位数超过16位的运算。

创建对象

  • BigDecimal的构造方法可以直接传入数字字符串或者int、double等基础数据类型创建对象:
BigDecimal bd1=new BigDecimal("1.0");
BigDecimal bd2=new BigDecimal(1);
BigDecimal bd3=new BigDecimal(1.0);
  • 两种创建方式的区别在于用字符串创建进行运算能获取期望值:
BigDecimal bd1=new BigDecimal("1.0");
BigDecimal bd2=new BigDecimal("0.9");
BigDecimal r1=bd1.subtract(bd2);
System.out.println(r1);   //0.1
  • 用基本数据类型创建进行运算能获得更高精度的值:
BigDecimal a = new BigDecimal(1);
BigDecimal b = new BigDecimal(0.9);
System.out.println(a.subtract(b));
//结果为: 0.09999999999999997779553950749686919152736663818359375

加减乘除运算


//BigDecimal,大的浮点数精确计算
    BigDecimal bd1=new BigDecimal("1.0");
    BigDecimal bd2=new BigDecimal("0.9");
    //减法
    BigDecimal r1=bd1.subtract(bd2);
    System.out.println(r1);   //0.1

    //加法
    BigDecimal r2=bd1.add(bd2);
    System.out.println(r2);   //1.9

    //乘法
    BigDecimal r3=bd1.multiply(bd2);
    System.out.println(r3);   // 0.90

    //除法
    BigDecimal r4 = new BigDecimal("1.4").subtract(new BigDecimal("0.5"))
        .divide(new BigDecimal("0.9"));
    System.out.println(r4);   // 1

//进行除法时如果除不尽的话,会报异常,此时需要制定模式
    BigDecimal r5=new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
    System.out.println(r5);	 //向上舍 3.33
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值