BigDecimal加减乘除运算及注意事项

加法

	BigDecimal b1 = new BigDecimal(10);
	BigDecimal b2 = new BigDecimal(5);
	System.out.println(b1.add(b2));
	// 输出结果:15

	BigDecimal b3 = new BigDecimal(13.14);
	BigDecimal b4 = new BigDecimal(5.20);
	System.out.println(b3.add(b4));
	// 输出结果:18.34000000000000074606987254810519516468048095703125
	System.out.println(b3.add(b4).setScale(2, BigDecimal.ROUND_HALF_UP));
	// 输出结果:18.34

减法

	BigDecimal b1 = new BigDecimal(10);
	BigDecimal b2 = new BigDecimal(5);
	System.out.println(b1.subtract(b2));
	// 输出结果:5

	BigDecimal b3 = new BigDecimal(13.14);
	BigDecimal b4 = new BigDecimal(5.20);
	System.out.println(b3.subtract(b4));
	// 输出结果:7.94000000000000039079850466805510222911834716796875
	System.out.println(b3.subtract(b4).setScale(2, BigDecimal.ROUND_HALF_UP));
	// 输出结果:7.94

乘法

	BigDecimal b1 = new BigDecimal(10);
	BigDecimal b2 = new BigDecimal(5);
	System.out.println(b1.multiply(b2));
	// 输出结果:50

	BigDecimal b3 = new BigDecimal(13.14);
	BigDecimal b4 = new BigDecimal(5.20);
	System.out.println(b3.multiply(b4));
	// 输出结果:68.328000000000005289990667733945984784716040408651717701256356196637398170423693954944610595703125
	System.out.println(b3.multiply(b4).setScale(2, BigDecimal.ROUND_HALF_UP));
	// 输出结果:68.33

除法

	BigDecimal b1 = new BigDecimal(10);
	BigDecimal b2 = new BigDecimal(5);
	System.out.println(b1.divide(b2));
	// 输出结果:2
	
	BigDecimal b3 = new BigDecimal(10);
	BigDecimal b4 = new BigDecimal(3);
	System.out.println(b3.divide(b4));
	// 提示Non-terminating decimal expansion; no exact representable decimal result异常

	BigDecimal b5 = new BigDecimal(13.14);
	BigDecimal b6 = new BigDecimal(5.20);
	System.out.println(b5.divide(b6));
	// 提示Non-terminating decimal expansion; no exact representable decimal result异常
	System.out.println(b5.divide(b6).setScale(2, BigDecimal.ROUND_HALF_UP));
	// 提示Non-terminating decimal expansion; no exact representable decimal result
	System.out.println(b5.divide(b6,2,BigDecimal.ROUND_HALF_UP));
	// 输出结果:2.53

加、减、乘其实没什么好说的,值得注意的是当BigDecimal对象是以new BIgDecimal(double val)创建的,则执行加、减、乘运算时会存在精度问题,需要设置需要保留的小数位和进位方式,即使用setScale方法;
而对于除法,无论是参数是double类型的,还是除不尽的情况,都需要做格式化,否则会报Non-terminating decimal expansion; no exact representable decimal result异常,且写法与加、减、乘不一样。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值