BigDecimal

BigDecimal

一、浅析

  • Float和Double都是浮点数,处理数据,会丢失一定的精确度;

    Java在java.math包中提供API类BigDecimal,用来对超过16位有效位的数进行精确的运算。

    所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作。

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

二、 BigDecimal用法

1、BigDecimal构造方法

  • BigDecimal(double val)

    将double表示形式转换为BigDecimal

        BigDecimal intBigDecimal = new BigDecimal(2);
        System.out.println(intBigDecimal);//2
    
  • BigDecimal(int val)

    将int表示形式转换成BigDecimal

        BigDecimal doubleBigDecimal = new BigDecimal(0.2);
        System.out.println(doubleBigDecimal);//0.200000000000000011102230246251565404236316680908203125
    
    
    • 参数类型为double的构造方法的结果有一定的不可预知性;
    • 0.2——–非标度值为2,其标度为2,实际上等于0.200000000000000011102230246251565404236316680908203125,,这是因为0.1无法准确地表示为double。这样,传入构造方法的值不会正好等于0.2
  • BigDecimal(String val)

    将String表示形式转换成BigDecimal

        BigDecimal stringBigDecimal = new BigDecimal("0.2");
        System.out.println(stringBigDecimal);//0.2
    
    • String构造方法是完全可预知的。优先使用String构造方法

2、当double必须做BigDecimal的源时

  • Double.toString()转String
    BigDecimal valueOf = BigDecimal.valueOf(2.3);
    
  • 静态方法valueOf()
    BigDecimal toString = new BigDecimal(Double.toString(2.3));
    

三、 BigDecimal加减乘除运算

  1. 加法 add()

    BigDecimal a = new BigDecimal("4.5");
    BigDecimal b = new BigDecimal("1.5");
    System.out.println("a+b = " + a.add(b))//a+b = 6.0
    
  2. 减法 subtract()

    System.out.println("a-b = " + a.subtract(b));//a-b = 3.0
    
  3. 乘法 multiply

    System.out.println("a*b = " + a.multiply(b));//a*b = 6.75
    
  4. 除法 divide

    System.out.println("a+b = " + a.divide(b));//a+b = 3
    
    • public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

      第一参数表示除数, 第二个参数表示小数点后保留位数,
      第三个参数表示舍入模式,只有在作除法运算或四舍五入时才用到舍入模式

    • 四舍五入采用 ROUND_HALF_UP
      
  • 注意:
    加减乘除最终返回的都是一个新的BigDecimal对象,原来的a不变
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值