BigDecimal类

 在程序中执行下列代码,会出现什么问题?

    System.out.println(0.09 + 0.01);

    System.out.println(1.0 - 0.32);

    System.out.println(1.015 * 100);

    System.out.println(1.301 / 100);

 double和float类型在运算中很容易丢失精度,造成数据的不准确性,Java提供我们BigDecimal类可以实现浮点数据的高精度运算

构造方法如下:

建议浮点数据以字符串形式给出,因为参数结果是可以预知的

实现加法减法乘法代码如下:

    public static void main(String[] args) {

          //大数据封装为BigDecimal对象

          BigDecimal big1 = new BigDecimal("0.09");

          BigDecimal big2 = new BigDecimal("0.01");

          //add实现加法运算

          BigDecimal bigAdd = big1.add(big2);

         

          BigDecimal big3 = new BigDecimal("1.0");

          BigDecimal big4 = new BigDecimal("0.32");

          //subtract实现减法运算

          BigDecimal bigSub = big3.subtract(big4);

         

          BigDecimal big5 = new BigDecimal("1.105");

          BigDecimal big6 = new BigDecimal("100");

          //multiply实现乘法运算

          BigDecimal bigMul = big5.multiply(big6);

  对于浮点数据的除法运算,和整数不同,可能出现无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式

         /*
          * BigDecimal实现除法运算
          * divide(BigDecimal divisor, int scale, int roundingMode)
          * int scale:保留几位小数
          * int roundingMode:保留模式
          * 保留模式  阅读API文档
          * static int ROUND_UP     向上+1
          * static int ROUND_DOWN   直接舍去
          * static int ROUND_HALF_UP    >=0.5 向上+1
          * static int ROUND_HALF_DOWN  > 0.5 向上+1,否则直接舍去
          */
         BigDecimal big7 = new BigDecimal("1.601");
         BigDecimal big8 = new BigDecimal("100");
         BigDecimal bigDiv1 = big7.divide(big8,2,BigDecimal.ROUND_UP);
         BigDecimal bigDiv2 = big7.divide(big8,2,BigDecimal.ROUND_DOWN);
         BigDecimal bigDiv3 = big7.divide(big8,2,BigDecimal.ROUND_HALF_UP);
         BigDecimal bigDiv4 = big7.divide(big8,2,BigDecimal.ROUND_HALF_DOWN);
        

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值