彻底解决BigDecimal出现很多位小数问题

本文探讨了BigDecimal在Java中处理浮点数时的重要性和正确使用方法,避免精度丢失。文章详细介绍了如何创建BigDecimal对象而不损失精度,以及在进行算术运算时如何设定小数点后位数和舍入方式,确保计算结果的准确性。

1、BigDecimal对象不要构造Double类型小数
比如:

BigDecimal num5 = new BigDecimal(2.225667);
//会损失经度,打印结果:2.225667000000000061987748267711140215396881103515625
System.out.println(num5);
应该改为写法:
BigDecimal num5 = new BigDecimal("2.225667");
或者不是double类型的也可以,例如:
BigDecimal num2 = new BigDecimal(2);//这种写法是可以的

2、多个BigDecimal相加减乘除的结果可能出现类似:
100438.137000000000000002
100438.1370000000
这样的结果。
观察过程,比如代码:

BigDecimal num1 = new BigDecimal("54432.30000122");
    	BigDecimal num2 = new BigDecimal("5.3100440");
    	BigDecimal result = num1.add(num2);
    	//结果为54437.61004522
    	System.out.println(result);
    	//结果为54437.6100
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR));
    	//结果为54437.61
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR).stripTrailingZeros());
    	//假如位数过多有时间会变为科学计数法,加 toPlainString()则控制不会出现科学计数法
    	System.out.println(result.setScale(4,BigDecimal.ROUND_FLOOR).stripTrailingZeros().toPlainString());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangyue23com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值