BigDecimal --处理double/float精度问题

探讨使用Java BigDecimal类处理金额计算与浮点数运算的精确性问题,包括常见错误与正确实践,如保留小数位数及四舍五入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求: 做金额相关的处理, eg: 计算1.0 - 0.7的结果

public static void main(String[] args) {
		System.out.println(1.0 - 0.7);
		System.out.println(new BigDecimal(1.0).subtract(new BigDecimal(0.7)));
		System.out.println(new BigDecimal("1.0").subtract(new BigDecimal("0.7")));
	}

运行结果:

0.30000000000000004
0.3000000000000000444089209850062616169452667236328125
0.3

备注: BigDecimal 处理浮点数计算时, 需要将浮点数对象以字符串的形式转为BigDecimal 对象;

 

需求2: 50除以3, 保留2位小数

public static void main(String[] args) {
		System.out.println(50/3);
//		System.out.println(new BigDecimal(50).divide(new BigDecimal(3)));//报错
		System.out.println(new BigDecimal(50).divide(new BigDecimal(3), 2, BigDecimal.ROUND_HALF_UP));
	}

运行结果:

16
16.67

 

## 备注:

直接用divide()会报错: java.lang.ArithmeticException

此处需要指定保留小数位数(第二个参数--此处为2), BigDecimal.ROUND_HALF_UP设置为四舍五入;

BigDecimal.ROUND_HALF_DOWN等参数用法不做赘述;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值