BigDecimal

先来看一段代码 :

public static void main(String[] args) {
    //面试题
    double res = (1.4-0.5)/0.9;
    System.out.println(res);
}

(1.4 - 0.5) / 0.9 显然等于1 ,但是在程序中结果却是0.9999999999999999

为什么?

double是近似值存储!(比如:double类型的1.0,实际存储可能是0.9999999999)

怎么办?

借助BigDecimal

BigDecimal

  • 位置:java.math中。
  • 作用:精确计算浮点数。
  • 创建方式:BigDecimal bd = new BigDecimal(“1.0”);
public static void main(String[] args) {
    //面试题
    double res = (1.4-0.5)/0.9;
    System.out.println(res);
    
    //使用BigDecimal
    BigDecimal bd1 = new BigDecimal("1.4");
    BigDecimal bd2 = new BigDecimal("0.5");
    BigDecimal bd3 = new BigDecimal("0.9");
    BigDecimal result1 = (bd1.subtract(bd2).divide(bd3));
    System.out.println(result1);

    //链式使用
    BigDecimal result2 =(new BigDecimal("1.4"))
        .subtract(new BigDecimal("0.5"))
        .divide(new BigDecimal("0.9"));
    System.out.println(result2);
    
    //除不尽的情况 - 可以在divide中设置保留小数位数以及保留规则(四舍五入或其他)
    BigDecimal result3 = (new BigDecimal("20"))
        .divide(new BigDecimal("3"), 3, BigDecimal.ROUND_HALF_UP);
    System.out.println(result3);
}

结果为:

0.9999999999999999
1
1
6.667

  • 加:BigDecimal add(BigDecimal bd)
  • 减:BigDecimal subtract(BigDecimal bd)
  • 乘:BigDecimal multiply(BigDecimal bd)
  • 除:BigDecimal divide(BigDecimal bd)

(进行除法运算的时候,抛出错误!如果不能准确的计算出结果时需要制定保留的位数和取舍方式)


知识点总结自bilibili(Java学习营)视频链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值