BigDecimal使用ROUND_HALF_UP进行四舍五入

本文通过实例演示了使用BigDecimal处理浮点数时可能遇到的精度丢失问题,并提供了两种解决方法:使用字符串构造方法和valueOf方法。

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

BigDecimal bdTest = new BigDecimal(1.745);
BigDecimal bdTest1 = new BigDecimal(0.745);
bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);
bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("bdTest:" + bdTest); // 1.75
System.out.println("bdTest1:" + bdTest1); // 0.74

运行以上代码可以看到,1.745四舍五入的结果是1.750.745四舍五入的结果是0.74

原因:
使用参数为float或double的BigDecimal创建对象会丢失精度。因此强烈建议不要使用参数为float或double的BigDecimal创建对象。

System.out.println(new BigDecimal(1.745)); // 1.74500000000000010658141036401502788066864013671875
System.out.println(new BigDecimal(0.745)); // 0.74499999999999999555910790149937383830547332763671875

解决办法:
1. 使用BigDecimal(String val)的构造方法创建对象
new BigDecimal("1.745");
new BigDecimal("0.745");
2. 使用使用BigDecimal的valueOf(double val)方法创建对象
BigDecimal.valueOf(1.745);
BigDecimal.valueOf(0.745);

http://stackoverflow.com/questions/12460482/how-to-round-0-745-to-0-75-using-bigdecimal-round-half-up

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值