BigDecimal类的基础知识整理

loat和double类型无法提供完全精确的计算结果,所以不能被应用于要求计算完全精确结果的场合,这时候就需要使用BigDecimal类。

/**
 * @description: BigDecimal类的测试类
 * @author: Murphy
 * @date: 2020/7/112:31 上午
 */
public class BigDecimalDemo {
    public static void main(String[] args) {
        double a = 0.1;
        double b = 0.2;
        System.out.println(a + b);//输出结果:0.30000000000000004
    }
}

造成上述结果的原因:float和double类型的设计目标主要是为了科学计算和工程计算,它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的,因此无法提供完全精确的结果。计算机是二进制的,浮点数没办法用二进制进行精确表示,因此浮点数运算会产生一定误差,例如2.4的二进制表示并非就是精确的二进制,浮点数的值实际上是由一个特定的数学公式计算得到的。

BigDecimal类的构造方法:

①public BigDecimal(double val):这种构造方法不建议使用,原因是double类型无法被精确表示,因此不能作为参数传入;

②public BigDecimal(int val):将int类型转换成BigDecimal类型;

③public BigDecimal(String val):建议使用。

/**
 * @description: BigDecimal类的测试类
 * @author: Murphy
 * @date: 2020/7/112:31 上午
 */
public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal(0.1);
        BigDecimal b = new BigDecimal(0.2);
        BigDecimal c = new BigDecimal("0.1");
        BigDecimal d = new BigDecimal("0.2");
        System.out.println(a.add(b));//0.3000000000000000166533453693773481063544750213623046875
        System.out.println(c.add(d));//0.3
    }
}

对于常用的加减乘除运算,BigDecimal类提供了常用的方法:

①public BigDecimal add(BigDecimal val):加法;

②public BigDecimal substract(BigDecimal val):减法;

③public BigDecimal multiply(BigDecimal val):乘法;

④public BigDecimal divide(BigDecimal val):除法。

/**
 * @description: BigDecimal类的测试类
 * @author: Murphy
 * @date: 2020/7/112:31 上午
 */
public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("4.5");
        BigDecimal b = new BigDecimal("1.3");
        System.out.println(a.divide(b));
    }
}
//输出结果:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

造成上述结果的原因是:不能整除,此时需要设置其他参数。

public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):第一个参数表示除数,第二个参数表示小数点后保留单位数,第三个参数表示舍入模式,常规使用RoundingMode.HALF_UP,表示四舍五入。

/**
 * @description: BigDecimal类的测试类
 * @author: Murphy
 * @date: 2020/7/112:31 上午
 */
public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal a = new BigDecimal("4.5");
        BigDecimal b = new BigDecimal("1.3");
        System.out.println(a.divide(b, 4, RoundingMode.HALF_UP));
    }
}
//输出结果:
3.4615
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值